WebKit Bugzilla
Attachment 342044 Details for
Bug 186267
: Sync web-platform-tests repo to 197cdad
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186267-20180606082158.patch (text/plain), 8.37 MB, created by
Brendan McLoughlin
on 2018-06-06 05:22:00 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Brendan McLoughlin
Created:
2018-06-06 05:22:00 PDT
Size:
8.37 MB
patch
obsolete
>Subversion Revision: 232464 >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index b4f6d377da2561a53d0e75fbef822b403333b411..c0da1668f340daa21a63ea3e7140fda95514bf7e 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,18 @@ >+2018-06-06 Brendan McLoughlin <brendan@bocoup.com> >+ >+ Sync web-platform-tests repo to 197cdad >+ https://bugs.webkit.org/show_bug.cgi?id=186267 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestExpectations: >+ * platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt: >+ * platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt: >+ * platform/mac/imported/w3c/web-platform-tests/beacon/headers/header-content-type-expected.txt: >+ * platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-expected.txt: >+ * platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-expected.txt: >+ * platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt: >+ > 2018-06-04 Zan Dobersek <zdobersek@igalia.com> > > Unreviewed WPE gardening. >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 89b304c20ca35720123e2eb79562820097a40598..5b117e49c7a0af9777955a15e03f9c8fd7679dc1 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,2840 @@ >+2018-06-06 Brendan McLoughlin <brendan@bocoup.com> >+ >+ Sync web-platform-tests repo to 197cdad >+ https://bugs.webkit.org/show_bug.cgi?id=186267 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt: >+ * web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html: >+ * web-platform-tests/2dcontext/imagebitmap/w3c-import.log: >+ * web-platform-tests/BackgroundSync/OWNERS: Added. >+ * web-platform-tests/BackgroundSync/interfaces.any-expected.txt: Added. >+ * web-platform-tests/BackgroundSync/interfaces.any.html: Added. >+ * web-platform-tests/BackgroundSync/interfaces.any.js: Added. >+ (promise_test.async): >+ * web-platform-tests/BackgroundSync/interfaces.any.worker-expected.txt: Added. >+ * web-platform-tests/BackgroundSync/interfaces.any.worker.html: Added. >+ * web-platform-tests/BackgroundSync/w3c-import.log: Added. >+ * web-platform-tests/CODEOWNERS: Added. >+ * web-platform-tests/CONTRIBUTING.md: >+ * web-platform-tests/FileAPI/BlobURL/support/file_test2.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.html. >+ * web-platform-tests/FileAPI/BlobURL/support/w3c-import.log: >+ * web-platform-tests/FileAPI/FileReader/support/file_test1.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.svg. >+ * web-platform-tests/FileAPI/FileReader/workers-expected.txt: Added. >+ * web-platform-tests/FileAPI/FileReader/workers.html: Added. >+ * web-platform-tests/FileAPI/blob/Blob-constructor-endings-expected.txt: Added. >+ * web-platform-tests/FileAPI/blob/Blob-constructor-endings.html: Added. >+ * web-platform-tests/FileAPI/blob/w3c-import.log: >+ * web-platform-tests/FileAPI/file/File-constructor-endings-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/File-constructor-endings.html: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative.html: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-utf-8-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-utf-8.html: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative.html: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative-expected.txt: Added. >+ * web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative.html: Added. >+ * web-platform-tests/FileAPI/file/send-file-form.html: Added. >+ * web-platform-tests/FileAPI/historical.https-expected.txt: >+ * web-platform-tests/FileAPI/historical.https.html: >+ * web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads-expected.txt: >+ * web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads.html: >+ * web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString-expected.txt: Added. >+ * web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString.html: Added. >+ * web-platform-tests/FileAPI/reading-data-section/w3c-import.log: >+ * web-platform-tests/FileAPI/support/send-file-form-helper.js: Added. >+ (const.formPostFileUploadTest): >+ * web-platform-tests/FileAPI/support/w3c-import.log: >+ * web-platform-tests/FileAPI/unicode-expected.txt: Added. >+ * web-platform-tests/FileAPI/unicode.html: Added. >+ * web-platform-tests/FileAPI/url/resources/w3c-import.log: Added. >+ * web-platform-tests/FileAPI/url/url-in-tags-revoke.window.js: Added. >+ (async_test.t.frame.onload.t.step_func_done): >+ (async_test.t.frame.onload.t.step_func): >+ (async_test.t.add_completion_callback): >+ (async_test.t.win.onload.t.step_func_done): >+ (receive_message_on_channel): >+ (async_test.t.const.blob.new.Blob.window_contents_for_channel): >+ (async_test.t.e.onload.t.step_func_done): >+ * web-platform-tests/FileAPI/url/url-in-tags.window.js: >+ (async_test.t.frame.contentWindow.onscroll.t.step_func_done): >+ * web-platform-tests/FileAPI/url/url-reload.window.js: Added. >+ (blob_url_reload_test): >+ * web-platform-tests/FileAPI/url/w3c-import.log: >+ * web-platform-tests/FileAPI/w3c-import.log: >+ * web-platform-tests/IndexedDB/bigint_value-expected.txt: Added. >+ * web-platform-tests/IndexedDB/bigint_value.htm: Added. >+ * web-platform-tests/IndexedDB/historical-expected.txt: >+ * web-platform-tests/IndexedDB/historical.html: >+ * web-platform-tests/IndexedDB/idbcursor-iterating-update-expected.txt: Added. >+ * web-platform-tests/IndexedDB/idbcursor-iterating-update.htm: Added. >+ * web-platform-tests/IndexedDB/interleaved-cursors-common.js: Added. >+ (objectKey): >+ (objectValue): >+ (writeCursorObjects): >+ (interleaveCursors): >+ * web-platform-tests/IndexedDB/interleaved-cursors-large-expected.txt: Added. >+ * web-platform-tests/IndexedDB/interleaved-cursors-large.html: Added. >+ * web-platform-tests/IndexedDB/interleaved-cursors-small-expected.txt: Added. >+ * web-platform-tests/IndexedDB/interleaved-cursors-small.html: Added. >+ * web-platform-tests/IndexedDB/keypath-special-identifiers-expected.txt: >+ * web-platform-tests/IndexedDB/keypath-special-identifiers.htm: >+ * web-platform-tests/IndexedDB/keypath.htm: >+ * web-platform-tests/IndexedDB/w3c-import.log: >+ * web-platform-tests/IndexedDB/wasm-module-value-expected.txt: Added. >+ * web-platform-tests/IndexedDB/wasm-module-value.html: Added. >+ * web-platform-tests/README.md: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any-expected.txt: Copied from LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker-expected.txt: Copied from LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes.js: >+ (run_test): >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any-expected.txt: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker-expected.txt: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any-expected.txt: Copied from LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker-expected.txt: Copied from LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker.html: Added. >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt: >+ * web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https-expected.txt: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html: Removed. >+ * web-platform-tests/WebCryptoAPI/generateKey/w3c-import.log: >+ * web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object-expected.txt: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object.html: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object-expected.txt: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object.html: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any-expected.txt: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.html: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.js: Added. >+ (test): >+ (test.regExp.Symbol.iterator): >+ (promise_test.async): >+ * web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker-expected.txt: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker.html: Added. >+ * web-platform-tests/WebIDL/ecmascript-binding/w3c-import.log: >+ * web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt: >+ * web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt: >+ * web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt: >+ * web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt: >+ * web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt: >+ * web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt: >+ * web-platform-tests/accname/OWNERS: Added. >+ * web-platform-tests/accname/foo.jpg: Added. >+ * web-platform-tests/accname/test.png: Added. >+ * web-platform-tests/accname/w3c-import.log: Added. >+ * web-platform-tests/acid/OWNERS: Added. >+ * web-platform-tests/acid/README.md: Added. >+ * web-platform-tests/acid/acid2/404.html: Added. >+ * web-platform-tests/acid/acid2/reference.png: Added. >+ * web-platform-tests/acid/acid2/reftest-expected.html: Added. >+ * web-platform-tests/acid/acid2/reftest.html: Added. >+ * web-platform-tests/acid/acid2/test.html: Added. >+ * web-platform-tests/acid/acid2/w3c-import.log: Added. >+ * web-platform-tests/acid/acid3/empty.css: Added. >+ (<!DOCTYPE HTML><html><head><title>FAIL</title><style>): >+ (h1): >+ * web-platform-tests/acid/acid3/empty.css.headers: Added. >+ * web-platform-tests/acid/acid3/empty.html: Added. >+ * web-platform-tests/acid/acid3/empty.png: Added. >+ * web-platform-tests/acid/acid3/empty.txt: Added. >+ * web-platform-tests/acid/acid3/empty.xml: Added. >+ * web-platform-tests/acid/acid3/empty.xml.headers: Added. >+ * web-platform-tests/acid/acid3/favicon.ico: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xhtml. >+ * web-platform-tests/acid/acid3/favicon.ico.headers: Added. >+ * web-platform-tests/acid/acid3/numbered-tests.html: Added. >+ * web-platform-tests/acid/acid3/reference.png: Added. >+ * web-platform-tests/acid/acid3/support-a.png: Added. >+ * web-platform-tests/acid/acid3/support-b.png: Added. >+ * web-platform-tests/acid/acid3/support-b.png.headers: Added. >+ * web-platform-tests/acid/acid3/svg.xml: Added. >+ * web-platform-tests/acid/acid3/svg.xml.headers: Added. >+ * web-platform-tests/acid/acid3/test-expected.html: Added. >+ * web-platform-tests/acid/acid3/test.html: Added. >+ * web-platform-tests/acid/acid3/w3c-import.log: Added. >+ * web-platform-tests/acid/acid3/xhtml.1: Added. >+ * web-platform-tests/acid/acid3/xhtml.1.headers: Added. >+ * web-platform-tests/acid/acid3/xhtml.2: Added. >+ * web-platform-tests/acid/acid3/xhtml.2.headers: Added. >+ * web-platform-tests/acid/acid3/xhtml.3: Added. >+ * web-platform-tests/acid/acid3/xhtml.3.headers: Added. >+ * web-platform-tests/acid/w3c-import.log: Added. >+ * web-platform-tests/async-local-storage/OWNERS: Added. >+ * web-platform-tests/async-local-storage/storage-smoke-test.https.tentative-expected.txt: Added. >+ * web-platform-tests/async-local-storage/storage-smoke-test.https.tentative.html: Added. >+ * web-platform-tests/async-local-storage/w3c-import.log: Added. >+ * web-platform-tests/background-fetch/interfaces.html: >+ * web-platform-tests/background-fetch/interfaces.worker.js: >+ (promise_test.async): >+ (promise_test): Deleted. >+ * web-platform-tests/beacon/OWNERS: Added. >+ * web-platform-tests/beacon/beacon-common.sub.js: >+ * web-platform-tests/beacon/beacon-cors.sub.window.js: >+ (runTests.self.buildId): >+ (runTests.self.buildBaseUrl): >+ (runTests.self.buildTargetUrl): >+ (runTests): >+ * web-platform-tests/beacon/beacon-error.window.js: >+ (promise_test.async): >+ * web-platform-tests/beacon/beacon-navigate-expected.txt: >+ * web-platform-tests/beacon/headers/header-content-type.html: >+ * web-platform-tests/beacon/resources/beacon.py: >+ (main): >+ * web-platform-tests/beacon/w3c-import.log: >+ * web-platform-tests/budget-api/OWNERS: Added. >+ * web-platform-tests/budget-api/interfaces.any-expected.txt: Added. >+ * web-platform-tests/budget-api/interfaces.any.html: Added. >+ * web-platform-tests/budget-api/interfaces.any.js: Added. >+ (promise_test.async): >+ * web-platform-tests/budget-api/interfaces.any.worker-expected.txt: Added. >+ * web-platform-tests/budget-api/interfaces.any.worker.html: Added. >+ * web-platform-tests/budget-api/w3c-import.log: Added. >+ * web-platform-tests/check_stability.ini: >+ * web-platform-tests/client-hints/OWNERS: Added. >+ * web-platform-tests/client-hints/accept_ch.http-expected.txt: Added. >+ * web-platform-tests/client-hints/accept_ch.http.html: Added. >+ * web-platform-tests/client-hints/accept_ch.http.html.headers: Added. >+ * web-platform-tests/client-hints/accept_ch.sub.https-expected.txt: Added. >+ * web-platform-tests/client-hints/accept_ch.sub.https.html: Added. >+ * web-platform-tests/client-hints/accept_ch.sub.https.html.headers: Added. >+ * web-platform-tests/client-hints/accept_ch_malformed_header.https-expected.txt: Added. >+ * web-platform-tests/client-hints/accept_ch_malformed_header.https.html: Added. >+ * web-platform-tests/client-hints/accept_ch_malformed_header.https.html.headers: Added. >+ * web-platform-tests/client-hints/echo_client_hints_received.py: Added. >+ (main): >+ * web-platform-tests/client-hints/w3c-import.log: Added. >+ * web-platform-tests/common/arrays.js: Added. >+ (export.areArraysEqual): >+ * web-platform-tests/common/css-paint-tests.js: Removed. >+ * web-platform-tests/common/performance-timeline-utils.js: >+ (test_entries): >+ * web-platform-tests/common/subset-tests.js: Added. >+ (shouldRunSubTest): >+ (subsetTest): >+ * web-platform-tests/common/vendor-prefix.js.headers: Removed. >+ * web-platform-tests/common/w3c-import.log: >+ * web-platform-tests/common/worklet-reftest.js: Added. >+ (importWorklet): >+ (async.importWorkletAndTerminateTestAfterAsyncPaint): >+ * web-platform-tests/cookie-store/OWNERS: Added. >+ * web-platform-tests/cookie-store/README.md: Added. >+ * web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js: Added. >+ (async.async_cleanup): >+ (promise_test.async.testCase.await.async_cleanup.async): >+ (promise_test.async.testCase.async_cleanup.async): >+ * web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js: Added. >+ * web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js: Added. >+ (test): >+ * web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js: Added. >+ (async.async_cleanup): >+ (promise_test.async.testCase.const.eventPromise.new.Promise): >+ * web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js: Added. >+ (async.async_cleanup): >+ (promise_test.async.testCase.const.eventPromise.new.Promise): >+ * web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js: Added. >+ (async.async_cleanup): >+ (promise_test.async.testCase.const.eventPromise.new.Promise): >+ * web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html: Added. >+ * web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js: Added. >+ (async.async_cleanup): >+ (promise_test.async.testCase.await.async_cleanup.async): >+ * web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js: Added. >+ (async.async_cleanup): >+ * web-platform-tests/cookie-store/cookieStore_special_names.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/cookieStore_special_names.tentative.html: Added. >+ * web-platform-tests/cookie-store/cookieStore_special_names.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/document_cookie.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/document_cookie.tentative.html: Added. >+ * web-platform-tests/cookie-store/document_cookie.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/document_cookie.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/document_getAll_multiple.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/document_getAll_multiple.tentative.html: Added. >+ * web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html: Added. >+ * web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/httponly_cookies.window.js: Added. >+ * web-platform-tests/cookie-store/idlharness.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/idlharness.tentative.html: Added. >+ * web-platform-tests/cookie-store/idlharness_serviceworker.js: Added. >+ (self.GLOBAL.isWindow): >+ (self.GLOBAL.isWorker): >+ * web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/no_name_and_no_value.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_and_no_value.tentative.html: Added. >+ * web-platform-tests/cookie-store/no_name_and_no_value.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/no_name_equals_in_value.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html: Added. >+ * web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/no_name_multiple_values.tentative-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_multiple_values.tentative.html: Added. >+ * web-platform-tests/cookie-store/no_name_multiple_values.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/ordering.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/ordering.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/resources/cookie-test-helpers.js: Added. >+ (async.getCookieString): >+ (async.getCookieStringHttp): >+ (async.getCookieBinaryHttp): >+ (async.setCookieStringHttp): >+ (async.setCookieBinaryHttp): >+ (async.getCookieStringDocument): >+ (async.setCookieStringDocument): >+ (observeNextCookieChangeEvent): >+ (async.verifyCookieChangeEvent): >+ (async.deleteAllCookies): >+ (async.cookie_test): >+ * web-platform-tests/cookie-store/resources/cookie_helper.py: Added. >+ (main): >+ * web-platform-tests/cookie-store/resources/document_cookie.js: Added. >+ * web-platform-tests/cookie-store/resources/http_cookie_and_set_cookie_headers.js: Added. >+ * web-platform-tests/cookie-store/resources/no_name_and_no_value.js: Added. >+ * web-platform-tests/cookie-store/resources/no_name_equals_in_value.js: Added. >+ * web-platform-tests/cookie-store/resources/no_name_multiple_values.js: Added. >+ * web-platform-tests/cookie-store/resources/ordering.js: Added. >+ * web-platform-tests/cookie-store/resources/w3c-import.log: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js: Added. >+ (self.GLOBAL.isWindow): >+ (self.GLOBAL.isWorker): >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js: Added. >+ (self.GLOBAL.isWindow): >+ (self.GLOBAL.isWorker): >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js: Added. >+ (self.GLOBAL.isWindow): >+ (self.GLOBAL.isWorker): >+ (event.event.waitUntil.async): >+ (async.async_cleanup): >+ (CompareStrings): >+ (RearmCookieChangeReceivedPromise): >+ (promise_test.async.testCase.await.async_cleanup): >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js: Added. >+ (self.GLOBAL.isWindow): >+ (self.GLOBAL.isWorker): >+ (event.event.waitUntil.async): >+ (async.async_cleanup): >+ (promise_test.async.testCase.cookie_change_received_promise.new.Promise): >+ (promise_test.async.testCase.await.async_cleanup): >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https-expected.txt: Added. >+ * web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html: Added. >+ * web-platform-tests/cookie-store/w3c-import.log: Added. >+ * web-platform-tests/cors/README.md: >+ * web-platform-tests/cors/client-hint-request-headers-expected.txt: Added. >+ * web-platform-tests/cors/client-hint-request-headers.htm: Added. >+ * web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub-expected.txt: Added. >+ * web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub.html: Added. >+ * web-platform-tests/cors/late-upload-events-expected.txt: >+ * web-platform-tests/cors/resources/cors-cookie.py: >+ (main): >+ * web-platform-tests/cors/resources/image-tainting-checker.sub.html: Added. >+ * web-platform-tests/cors/resources/status.py: >+ (main): >+ * web-platform-tests/cors/resources/w3c-import.log: >+ * web-platform-tests/cors/simple-requests.htm: >+ * web-platform-tests/cors/w3c-import.log: >+ * web-platform-tests/credential-management/OWNERS: Added. >+ * web-platform-tests/credential-management/federatedcredential-framed-get.sub.https-expected.txt: Added. >+ * web-platform-tests/credential-management/federatedcredential-framed-get.sub.https.html: Added. >+ * web-platform-tests/credential-management/passwordcredential-framed-get.sub.https-expected.txt: Added. >+ * web-platform-tests/credential-management/passwordcredential-framed-get.sub.https.html: Added. >+ * web-platform-tests/credential-management/require_securecontext-expected.txt: Added. >+ * web-platform-tests/credential-management/require_securecontext.html: Added. >+ * web-platform-tests/credential-management/support/echoing-nester.html: Added. >+ * web-platform-tests/credential-management/support/federatedcredential-get.html: Added. >+ * web-platform-tests/credential-management/support/passwordcredential-get.html: Added. >+ * web-platform-tests/credential-management/support/w3c-import.log: Added. >+ * web-platform-tests/credential-management/w3c-import.log: >+ * web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt: >+ * web-platform-tests/css/css-color/color-function-parsing.html: Added. >+ * web-platform-tests/css/css-color/color-resolving-hsl.html: Added. >+ * web-platform-tests/css/css-color/color-resolving-keywords.html: Added. >+ * web-platform-tests/css/css-color/color-resolving.html: Added. >+ * web-platform-tests/css/css-color/lab-004-expected.html: >+ * web-platform-tests/css/css-color/lab-004.html: >+ * web-platform-tests/css/css-color/lab-005-expected.html: >+ * web-platform-tests/css/css-color/lab-005.html: >+ * web-platform-tests/css/css-color/lab-006-expected.html: >+ * web-platform-tests/css/css-color/lab-006.html: >+ * web-platform-tests/css/css-color/lab-007-expected.html: >+ * web-platform-tests/css/css-color/lab-007.html: >+ * web-platform-tests/css/css-color/lch-001.html: >+ * web-platform-tests/css/css-color/lch-004-expected.html: >+ * web-platform-tests/css/css-color/lch-004.html: >+ * web-platform-tests/css/css-color/lch-005-expected.html: >+ * web-platform-tests/css/css-color/lch-005.html: >+ * web-platform-tests/css/css-color/lch-006-expected.html: >+ * web-platform-tests/css/css-color/lch-006.html: >+ * web-platform-tests/css/css-color/lch-007-expected.html: >+ * web-platform-tests/css/css-color/lch-007.html: >+ * web-platform-tests/css/css-color/rgb-002.html: >+ * web-platform-tests/css/css-color/rgb-004.html: >+ * web-platform-tests/css/css-color/rgb-006.html: >+ * web-platform-tests/css/css-color/rgb-008.html: >+ * web-platform-tests/css/css-color/rgb-rounding-001.html: Added. >+ * web-platform-tests/css/css-color/rgba-002.html: >+ * web-platform-tests/css/css-color/rgba-004.html: >+ * web-platform-tests/css/css-color/rgba-006.html: >+ * web-platform-tests/css/css-color/rgba-008.html: >+ * web-platform-tests/css/css-color/t32-opacity-basic-0.6-a.xht: Added. >+ * web-platform-tests/css/css-color/t32-opacity-zorder-c.xht: Added. >+ * web-platform-tests/css/css-color/t421-rgb-hex3-expand-b.xht: Added. >+ * web-platform-tests/css/css-color/t422-rgba-a0.6-a.xht: Added. >+ * web-platform-tests/css/css-color/t425-hsla-basic-a.xht: Added. >+ * web-platform-tests/css/css-color/w3c-import.log: >+ * web-platform-tests/css/css-display/display-contents-before-after-003-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-before-after-003.html: Added. >+ * web-platform-tests/css/css-display/display-contents-button-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-button.html: Added. >+ * web-platform-tests/css/css-display/display-contents-details-001-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-details-001.html: Added. >+ * web-platform-tests/css/css-display/display-contents-details-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-details.html: Added. >+ * web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001.html: Added. >+ * web-platform-tests/css/css-display/display-contents-fieldset-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html: Added. >+ * web-platform-tests/css/css-display/display-contents-fieldset.html: Added. >+ * web-platform-tests/css/css-display/display-contents-first-letter-002-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-first-letter-002.html: Added. >+ * web-platform-tests/css/css-display/display-contents-first-line-002-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-first-line-002.html: Added. >+ * web-platform-tests/css/css-display/display-contents-line-height-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-line-height.html: Added. >+ * web-platform-tests/css/css-display/display-contents-parsing-001.html: Added. >+ * web-platform-tests/css/css-display/display-contents-suppression-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-suppression-dynamic-001.html: Added. >+ * web-platform-tests/css/css-display/display-contents-svg-anchor-child.html: Added. >+ * web-platform-tests/css/css-display/display-contents-svg-elements-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-svg-elements.html: Added. >+ * web-platform-tests/css/css-display/display-contents-svg-switch-child.html: Added. >+ * web-platform-tests/css/css-display/display-contents-text-inherit-002-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-text-inherit-002.html: Added. >+ * web-platform-tests/css/css-display/display-contents-text-inherit-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-text-inherit.html: Added. >+ * web-platform-tests/css/css-display/display-contents-unusual-html-elements-none-expected.html: Added. >+ * web-platform-tests/css/css-display/display-contents-unusual-html-elements-none.html: Added. >+ * web-platform-tests/css/css-display/display-list-item-height-after-dom-change.html: Added. >+ * web-platform-tests/css/css-display/run-in/OWNERS: Added. >+ * web-platform-tests/css/css-display/run-in/after-content-display-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/anonymous-box-generation-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-attachment-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-image-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-position-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/background-repeat-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/before-content-display-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-bottom-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-bottom-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-bottom-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-bottom-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-collapse-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-left-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-left-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-left-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-left-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-right-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-right-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-right-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-right-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-spacing-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-top-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-top-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-top-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-top-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/border-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/bottom-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/caption-side-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/clear-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/clear-runin-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/cursor-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/direction-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/display-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/empty-cells-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/first-line-pseudo-009.xht: Added. >+ * web-platform-tests/css/css-display/run-in/float-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-family-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-size-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-style-applies-to-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-style-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-variant-applies-to-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-variant-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-weight-applies-to-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/font-weight-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/height-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/height-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/left-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/line-height-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-applies-to-011-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-image-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-position-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/margin-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/margin-bottom-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/margin-left-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/margin-right-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/margin-top-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/max-height-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/max-height-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/max-width-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/max-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/min-height-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/min-height-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/min-width-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/min-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/outline-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/outline-color-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/outline-style-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/outline-width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/overflow-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/padding-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/padding-bottom-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/padding-left-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/padding-right-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/padding-top-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/position-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/quotes-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/right-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-006.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-007.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-008.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-009.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-010.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-012.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-013.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-abspos-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-005-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-006-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-006.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-007-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-007.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-008-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-008.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-009-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-009.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-010-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-010.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-011-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-012-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-012.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-013-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-013.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-014-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-014.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-015-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-015.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-016-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-016.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-017-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-017.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-018-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-basic-018.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-breaking-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-breaking-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-clear-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-clear-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-clear-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-clear-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-005-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-float-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-005-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-006-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-007-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-display-none-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-float-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inherit-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inheritance-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-linebox-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-linebox-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-replaced-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-005-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-006-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-007-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-008-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-run-in-between-008.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-001-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-002-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-002.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-003-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-003.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-004-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-005-expected.xht: Added. >+ * web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht: Added. >+ * web-platform-tests/css/css-display/run-in/support/black15x15.png: Added. >+ * web-platform-tests/css/css-display/run-in/support/blue15x15.png: Added. >+ * web-platform-tests/css/css-display/run-in/support/blue96x96.png: Added. >+ * web-platform-tests/css/css-display/run-in/support/green15x15.png: Added. >+ * web-platform-tests/css/css-display/run-in/support/swatch-blue.png: Added. >+ * web-platform-tests/css/css-display/run-in/support/w3c-import.log: Added. >+ * web-platform-tests/css/css-display/run-in/table-anonymous-block-001.xht: Added. >+ * web-platform-tests/css/css-display/run-in/table-layout-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/text-align-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/text-indent-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/text-transform-applies-to-004-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/text-transform-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/top-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/unicode-bidi-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/vertical-align-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/visibility-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/w3c-import.log: Added. >+ * web-platform-tests/css/css-display/run-in/white-space-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/width-applies-to-011-expected.html: Added. >+ * web-platform-tests/css/css-display/run-in/width-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/run-in/word-spacing-applies-to-004.xht: Added. >+ * web-platform-tests/css/css-display/run-in/z-index-applies-to-011.xht: Added. >+ * web-platform-tests/css/css-display/w3c-import.log: >+ * web-platform-tests/css/css-grid/OWNERS: Added. >+ * web-platform-tests/css/css-grid/README.md: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html: Added. >+ * web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html: Added. >+ * web-platform-tests/css/css-grid/abspos/support/w3c-import.log: Added. >+ * web-platform-tests/css/css-grid/abspos/w3c-import.log: >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-009-expected.html: >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-009.html: >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html: >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-010.html: >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-011-expected.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-011.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-012-expected.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-gutters-012.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html: Added. >+ * web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html: Added. >+ * web-platform-tests/css/css-grid/alignment/w3c-import.log: >+ * web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table-expected.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001-expected.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001-expected.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-items/w3c-import.log: >+ * web-platform-tests/css/css-grid/grid-layout-properties.html: Added. >+ * web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-line-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-line-001.html: Added. >+ * web-platform-tests/css/css-grid/grid-model/w3c-import.log: >+ * web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html: Added. >+ * web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log: >+ * web-platform-tests/css/css-grid/w3c-import.log: Added. >+ * web-platform-tests/css/css-multicol/float-and-block-expected.xht: Added. >+ * web-platform-tests/css/css-multicol/float-and-block.html: Added. >+ * web-platform-tests/css/css-multicol/going-out-of-flow-after-spanner.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-000-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-000.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-001-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-001.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-002-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-002.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-003-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-003.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003-expected.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html: Added. >+ * web-platform-tests/css/css-multicol/multicol-gap-001.xht: >+ * web-platform-tests/css/css-multicol/multicol-gap-003.xht: >+ * web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit-expected.xht: Added. >+ * web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html: Added. >+ * web-platform-tests/css/css-multicol/w3c-import.log: >+ * web-platform-tests/css/css-multicol/zero-column-width-computed-style.html: Added. >+ * web-platform-tests/css/css-multicol/zero-column-width-layout-expected.html: Added. >+ * web-platform-tests/css/css-multicol/zero-column-width-layout.html: Added. >+ * web-platform-tests/css/css-pseudo/first-letter-property-whitelist-expected.txt: Added. >+ * web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html: Added. >+ * web-platform-tests/css/css-pseudo/first-line-and-placeholder-expected.html: Added. >+ * web-platform-tests/css/css-pseudo/first-line-and-placeholder.html: Added. >+ * web-platform-tests/css/css-pseudo/placeholder-input-number-expected.html: Added. >+ * web-platform-tests/css/css-pseudo/placeholder-input-number-notref.html: Added. >+ * web-platform-tests/css/css-pseudo/placeholder-input-number.html: Added. >+ * web-platform-tests/css/css-pseudo/w3c-import.log: >+ * web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override-expected.html: Added. >+ * web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html: Added. >+ * web-platform-tests/css/css-scoping/host-descendant-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/host-descendant-001.html: Added. >+ * web-platform-tests/css/css-scoping/host-descendant-002-expected.html: Added. >+ * web-platform-tests/css/css-scoping/host-descendant-002.html: Added. >+ * web-platform-tests/css/css-scoping/host-descendant-invalidation.html: Added. >+ * web-platform-tests/css/css-scoping/host-dom-001.html: Added. >+ * web-platform-tests/css/css-scoping/host-functional-descendant-invalidation.html: Added. >+ * web-platform-tests/css/css-scoping/host-multiple-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/host-multiple-001.html: Added. >+ * web-platform-tests/css/css-scoping/host-nested-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/host-nested-001.html: Added. >+ * web-platform-tests/css/css-scoping/host-slotted-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/host-slotted-001.html: Added. >+ * web-platform-tests/css/css-scoping/keyframes-001.html: Added. >+ * web-platform-tests/css/css-scoping/keyframes-002.html: Added. >+ * web-platform-tests/css/css-scoping/resources/host-green-box.css: Added. >+ (:host): >+ * web-platform-tests/css/css-scoping/resources/w3c-import.log: Added. >+ * web-platform-tests/css/css-scoping/shadow-assign-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-assign-dynamic-001.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-at-import-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-at-import.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-disabled-sheet-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-root-insert-into-document-expected.html: Added. >+ * web-platform-tests/css/css-scoping/shadow-root-insert-into-document.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-invalidation.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-link.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-parsing.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-slot.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-with-pseudo-element-expected.html: Added. >+ * web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html: Added. >+ * web-platform-tests/css/css-scoping/stylesheet-title-001-expected.html: Added. >+ * web-platform-tests/css/css-scoping/stylesheet-title-001.html: Added. >+ * web-platform-tests/css/css-scoping/stylesheet-title-002.html: Added. >+ * web-platform-tests/css/css-scoping/w3c-import.log: >+ * web-platform-tests/css/css-shapes/basic-shape-circle-ellipse-serialization.html: >+ * web-platform-tests/css/css-shapes/parsing/resources/parsing-testcommon.js: Added. >+ (test_valid_value): >+ * web-platform-tests/css/css-shapes/parsing/resources/w3c-import.log: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-image-threshold-invalid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-image-threshold-valid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-margin-invalid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-margin-valid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-outside-invalid-position.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-outside-invalid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-outside-valid-position.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/shape-outside-valid.html: Added. >+ * web-platform-tests/css/css-shapes/parsing/w3c-import.log: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/formatting-context/w3c-import.log: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-box/w3c-import.log: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/w3c-import.log: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-001.html: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-002.html: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-005.html: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-010.html: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/support/animated.gif: >+ * web-platform-tests/css/css-shapes/shape-outside/shape-image/w3c-import.log: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-015.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html: >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030-expected.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030.html: Added. >+ * web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/w3c-import.log: >+ * web-platform-tests/css/css-shapes/shape-outside/values/support/parsing-utils.js: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-010.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-011.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-012.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-013.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-014.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-015.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-016.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-017.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-018.html: >+ * web-platform-tests/css/css-shapes/spec-examples/shape-outside-019.html: >+ * web-platform-tests/css/css-shapes/spec-examples/support/spec-example-utils.js: >+ (runTest): >+ (approxShapeTest): >+ * web-platform-tests/css/css-text-decor/OWNERS: Added. >+ * web-platform-tests/css/css-text-decor/line-through-vertical-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/line-through-vertical.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-color-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-color-recalc-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-color-recalc.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-color.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-010-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-010.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-011-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-011.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-012-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-012.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-013-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-013.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-014.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-recalc-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line-recalc.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-line.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-serialization.tentative.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-style-multiple-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-style-multiple.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-style-recalc-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-style-recalc.html: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-002.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-003.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-004.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-005.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-006.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-007.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-008.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-009.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-010.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-011.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-decoration-visibility-012.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-color-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-001-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-001.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-002-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-002.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-006-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-006.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-007-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-007.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-008-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-008.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-010-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-010.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-012-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-012.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-016.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-021-expected.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-021.html: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-none-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-none-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-open-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-string-001-expected.xht: Added. >+ * web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht: Added. >+ * web-platform-tests/css/css-text-decor/w3c-import.log: Added. >+ * web-platform-tests/css/css-ui/nav-dir-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-missing-1.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-missing-2.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-missing-3.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-missing-4.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-dir-target-006.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-000.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-006.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-007.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-008.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-009.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-010.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-011.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-012.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-013.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-014.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-015.html: Added. >+ * web-platform-tests/css/css-ui/nav-down-016.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-000.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-006.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-007.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-008.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-009.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-010.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-011.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-012.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-013.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-014.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-015.html: Added. >+ * web-platform-tests/css/css-ui/nav-left-016.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-000.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-006.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-007.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-008.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-009.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-010.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-011.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-012.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-013.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-014.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-015.html: Added. >+ * web-platform-tests/css/css-ui/nav-right-016.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-000.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-001.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-002.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-003.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-004.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-005.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-006.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-007.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-008.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-009.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-010.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-011.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-012.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-013.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-014.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-015.html: Added. >+ * web-platform-tests/css/css-ui/nav-up-016.html: Added. >+ * web-platform-tests/css/css-ui/outline-017.html: >+ * web-platform-tests/css/css-ui/outline-018.html: >+ * web-platform-tests/css/css-ui/outline-020-expected.html: Added. >+ * web-platform-tests/css/css-ui/outline-020.html: Added. >+ * web-platform-tests/css/css-ui/parsing/box-sizing-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/box-sizing-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/caret-color-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/caret-color-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/cursor-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/cursor-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-color-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-color-valid-mandatory.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-color-valid-optional.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-offset-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-offset-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-style-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-style-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-valid-mandatory.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-valid-optional.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-width-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/outline-width-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/resize-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/resize-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/resources/parsing-testcommon.js: Added. >+ (test_valid_value): >+ * web-platform-tests/css/css-ui/parsing/resources/w3c-import.log: Added. >+ * web-platform-tests/css/css-ui/parsing/text-overflow-invalid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/text-overflow-valid.html: Added. >+ * web-platform-tests/css/css-ui/parsing/w3c-import.log: Added. >+ * web-platform-tests/css/css-ui/support/nav-dir-target-001-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-dir-target-002-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-dir-target-003-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-dir-target-004-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-dir-target-005-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-down-009-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-down-010-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-down-011-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-down-012-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-down-013-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-left-009-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-left-010-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-left-011-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-left-012-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-left-013-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-right-009-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-right-010-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-right-011-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-right-012-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-right-013-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-up-009-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-up-010-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-up-011-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-up-012-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/nav-up-013-frame.html: Added. >+ * web-platform-tests/css/css-ui/support/w3c-import.log: >+ * web-platform-tests/css/css-ui/text-overflow-024-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-024.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-025-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-025.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-026-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-026.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-027-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-027.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-028-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-028.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-029-expected.html: Added. >+ * web-platform-tests/css/css-ui/text-overflow-029.html: Added. >+ * web-platform-tests/css/css-ui/w3c-import.log: >+ * web-platform-tests/css/cssom-view/CaretPosition-001.html: Added. >+ * web-platform-tests/css/cssom-view/DOMRectList.html: Added. >+ * web-platform-tests/css/cssom-view/GetBoundingRect.html: Added. >+ * web-platform-tests/css/cssom-view/HTMLBody-ScrollArea_quirksmode.html: Added. >+ * web-platform-tests/css/cssom-view/MediaQueryList-001.html: Added. >+ * web-platform-tests/css/cssom-view/MediaQueryList-with-empty-string.html: Added. >+ * web-platform-tests/css/cssom-view/OWNERS: Added. >+ * web-platform-tests/css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-001.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-002.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-getBoxQuads-001.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-getClientRects-002.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-getClientRects.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-view-img-attributes-001.html: Added. >+ * web-platform-tests/css/cssom-view/cssom-view-window-screen-interface.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint-001.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint-002.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint-003.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint-parameters.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPoint.html: Added. >+ * web-platform-tests/css/cssom-view/elementFromPosition.html: Added. >+ * web-platform-tests/css/cssom-view/elementScroll-002.html: Added. >+ * web-platform-tests/css/cssom-view/elementScroll.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-iframes.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-invalid-cases.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-shadowroot.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-simple.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-svg-text.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-svg.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint-table.html: Added. >+ * web-platform-tests/css/cssom-view/elementsFromPoint.html: Added. >+ * web-platform-tests/css/cssom-view/historical.html: Added. >+ * web-platform-tests/css/cssom-view/htmlelement-offset-width-001.html: Added. >+ * web-platform-tests/css/cssom-view/iframe.html: Added. >+ * web-platform-tests/css/cssom-view/interfaces.html: Added. >+ * web-platform-tests/css/cssom-view/matchMedia.xht: Added. >+ * web-platform-tests/css/cssom-view/matchMediaAddListener.html: Added. >+ * web-platform-tests/css/cssom-view/media-query-list-interface.xht: Added. >+ * web-platform-tests/css/cssom-view/mouseEvent.html: Added. >+ * web-platform-tests/css/cssom-view/negativeMargins.html: Added. >+ * web-platform-tests/css/cssom-view/offsetParent_element_test.html: Added. >+ * web-platform-tests/css/cssom-view/offsetTopLeftInScrollableParent.html: Added. >+ * web-platform-tests/css/cssom-view/resources/elementsFromPoint.js: Added. >+ (nodeToString.prototype.else): >+ (nodeListToString): >+ (assertElementsFromPoint): >+ (checkElementsFromPointFourCorners): >+ * web-platform-tests/css/cssom-view/resources/iframe1.html: Added. >+ * web-platform-tests/css/cssom-view/resources/iframe2.html: Added. >+ * web-platform-tests/css/cssom-view/resources/w3c-import.log: Added. >+ * web-platform-tests/css/cssom-view/scroll-behavior-smooth.html: Added. >+ * web-platform-tests/css/cssom-view/scroll-no-layout-box.html: Added. >+ * web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html: Added. >+ * web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html: Added. >+ * web-platform-tests/css/cssom-view/scrollIntoView-shadow.html: Added. >+ * web-platform-tests/css/cssom-view/scrollIntoView-smooth.html: Added. >+ * web-platform-tests/css/cssom-view/scrollTop-display-change-expected.html: Added. >+ * web-platform-tests/css/cssom-view/scrollTop-display-change.html: Added. >+ * web-platform-tests/css/cssom-view/scrollWidthHeight.xht: Added. >+ * web-platform-tests/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht: Added. >+ * web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html: Added. >+ * web-platform-tests/css/cssom-view/scrolling-quirks-vs-nonquirks.html: Added. >+ * web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html: Added. >+ * web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002-expected.html: Added. >+ * web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html: Added. >+ * web-platform-tests/css/cssom-view/scrollingElement.html: Added. >+ * web-platform-tests/css/cssom-view/scrollintoview.html: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-green.png: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-lime.png: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-maroon.png: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-navy.png: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-red.png: Added. >+ * web-platform-tests/css/cssom-view/support/1x1-white.png: Added. >+ * web-platform-tests/css/cssom-view/support/60x60-gg-rr.png: Added. >+ * web-platform-tests/css/cssom-view/support/60x60-green.png: Added. >+ * web-platform-tests/css/cssom-view/support/60x60-red.png: Added. >+ * web-platform-tests/css/cssom-view/support/README: Added. >+ * web-platform-tests/css/cssom-view/support/a-green.css: Added. >+ (.a): >+ * web-platform-tests/css/cssom-view/support/b-green.css: Added. >+ (.b): >+ * web-platform-tests/css/cssom-view/support/c-red.css: Added. >+ (.c): >+ * web-platform-tests/css/cssom-view/support/cat.png: Added. >+ * web-platform-tests/css/cssom-view/support/import-green.css: Added. >+ (.import): >+ * web-platform-tests/css/cssom-view/support/import-red.css: Added. >+ (.import): >+ * web-platform-tests/css/cssom-view/support/pattern-grg-rgr-grg.png: Added. >+ * web-platform-tests/css/cssom-view/support/pattern-grg-rrg-rgg.png: Added. >+ * web-platform-tests/css/cssom-view/support/pattern-rgr-grg-rgr.png: Added. >+ * web-platform-tests/css/cssom-view/support/pattern-tr.png: Added. >+ * web-platform-tests/css/cssom-view/support/ruler-h-50%.png: Added. >+ * web-platform-tests/css/cssom-view/support/ruler-h-50px.png: Added. >+ * web-platform-tests/css/cssom-view/support/ruler-v-100px.png: Added. >+ * web-platform-tests/css/cssom-view/support/ruler-v-50px.png: Added. >+ * web-platform-tests/css/cssom-view/support/square-purple.png: Added. >+ * web-platform-tests/css/cssom-view/support/square-teal.png: Added. >+ * web-platform-tests/css/cssom-view/support/square-white.png: Added. >+ * web-platform-tests/css/cssom-view/support/support/README: Added. >+ * web-platform-tests/css/cssom-view/support/support/swatch-green.png: Added. >+ * web-platform-tests/css/cssom-view/support/support/swatch-red.png: Added. >+ * web-platform-tests/css/cssom-view/support/support/w3c-import.log: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-blue.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-green.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-lime.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-orange.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-red.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-teal.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-white.png: Added. >+ * web-platform-tests/css/cssom-view/support/swatch-yellow.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-bl.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-br.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-inner-half-size.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-outer.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-tl.png: Added. >+ * web-platform-tests/css/cssom-view/support/test-tr.png: Added. >+ * web-platform-tests/css/cssom-view/support/w3c-import.log: Added. >+ * web-platform-tests/css/cssom-view/ttwf-js-cssomview-getclientrects-length.html: Added. >+ * web-platform-tests/css/cssom-view/w3c-import.log: Added. >+ * web-platform-tests/css/cssom-view/window-interface.xht: Added. >+ * web-platform-tests/css/cssom-view/window-screen-height-immutable.html: Added. >+ * web-platform-tests/css/cssom-view/window-screen-height.html: Added. >+ * web-platform-tests/css/cssom-view/window-screen-width-immutable.html: Added. >+ * web-platform-tests/css/cssom-view/window-screen-width.html: Added. >+ * web-platform-tests/css/cssom/CSS.html: >+ * web-platform-tests/css/cssom/CSSKeyframeRule.html: >+ * web-platform-tests/css/cssom/CSSKeyframesRule.html: >+ * web-platform-tests/css/cssom/CSSNamespaceRule.html: >+ * web-platform-tests/css/cssom/CSSRuleList.html: >+ * web-platform-tests/css/cssom/CSSStyleRule-set-selectorText-namespace.html: >+ * web-platform-tests/css/cssom/CSSStyleRule-set-selectorText.html: >+ * web-platform-tests/css/cssom/CSSStyleRule.html: >+ * web-platform-tests/css/cssom/CSSStyleSheet.html: >+ * web-platform-tests/css/cssom/MediaList.html: >+ * web-platform-tests/css/cssom/MediaList2.xhtml: >+ * web-platform-tests/css/cssom/StyleSheetList.html: >+ * web-platform-tests/css/cssom/at-namespace.html: Added. >+ * web-platform-tests/css/cssom/computed-style-001.html: >+ * web-platform-tests/css/cssom/computed-style-002-expected.txt: >+ * web-platform-tests/css/cssom/computed-style-002.html: >+ * web-platform-tests/css/cssom/computed-style-003-expected.txt: >+ * web-platform-tests/css/cssom/computed-style-003.html: >+ * web-platform-tests/css/cssom/computed-style-004-expected.txt: >+ * web-platform-tests/css/cssom/computed-style-004.html: >+ * web-platform-tests/css/cssom/computed-style-set-property.html: Added. >+ * web-platform-tests/css/cssom/css-style-attr-decl-block.html: >+ * web-platform-tests/css/cssom/css-style-attribute-modifications.html: >+ * web-platform-tests/css/cssom/css-style-declaration-modifications.html: >+ * web-platform-tests/css/cssom/css-style-reparse.html: >+ * web-platform-tests/css/cssom/cssimportrule.html: >+ * web-platform-tests/css/cssom/cssom-cssText-serialize.html: >+ * web-platform-tests/css/cssom/cssom-cssstyledeclaration-set.html: >+ * web-platform-tests/css/cssom/cssom-fontfacerule-constructors.html: >+ * web-platform-tests/css/cssom/cssom-fontfacerule.html: >+ * web-platform-tests/css/cssom/cssom-ruleTypeAndOrder.html: >+ * web-platform-tests/css/cssom/cssom-setProperty-shorthand-expected.txt: >+ * web-platform-tests/css/cssom/cssom-setProperty-shorthand.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-csstext-final-delimiter.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-csstext-important.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-csstext.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-mutability.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-001.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-002.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-003.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-004.html: >+ * web-platform-tests/css/cssom/cssstyledeclaration-setter-order.html: >+ * web-platform-tests/css/cssom/escape.html: >+ * web-platform-tests/css/cssom/font-shorthand-serialization.html: >+ * web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html: >+ * web-platform-tests/css/cssom/getComputedStyle-dynamic-subdoc.html: >+ * web-platform-tests/css/cssom/getComputedStyle-pseudo.html: >+ * web-platform-tests/css/cssom/historical-expected.txt: >+ * web-platform-tests/css/cssom/historical.html: >+ * web-platform-tests/css/cssom/inline-style-001.html: >+ * web-platform-tests/css/cssom/insertRule-charset-no-index.html: >+ * web-platform-tests/css/cssom/insertRule-import-no-index.html: >+ * web-platform-tests/css/cssom/insertRule-namespace-no-index.html: >+ * web-platform-tests/css/cssom/insertRule-no-index.html: >+ * web-platform-tests/css/cssom/insertRule-syntax-error-01.html: >+ * web-platform-tests/css/cssom/interfaces.html: >+ * web-platform-tests/css/cssom/medialist-interfaces-001.html: >+ * web-platform-tests/css/cssom/medialist-interfaces-002.html: >+ * web-platform-tests/css/cssom/medialist-interfaces-003.html: >+ * web-platform-tests/css/cssom/medialist-interfaces-004.html: >+ * web-platform-tests/css/cssom/overflow-serialization.html: >+ * web-platform-tests/css/cssom/preferred-stylesheet-order.html: >+ * web-platform-tests/css/cssom/preferred-stylesheet-reversed-order.html: >+ * web-platform-tests/css/cssom/selectorSerialize.html: >+ * web-platform-tests/css/cssom/selectorText-modification-restyle-002.html: >+ * web-platform-tests/css/cssom/serialization-CSSDeclaration-with-important.html: >+ * web-platform-tests/css/cssom/serialize-namespaced-type-selectors.html: >+ * web-platform-tests/css/cssom/serialize-values-expected.txt: >+ * web-platform-tests/css/cssom/serialize-values.html: >+ * web-platform-tests/css/cssom/serialize-variable-reference.html: >+ * web-platform-tests/css/cssom/setproperty-null-undefined.html: >+ * web-platform-tests/css/cssom/shorthand-serialization.html: >+ * web-platform-tests/css/cssom/shorthand-values.html: >+ * web-platform-tests/css/cssom/style-sheet-interfaces-001.html: >+ * web-platform-tests/css/cssom/style-sheet-interfaces-002.html: >+ * web-platform-tests/css/cssom/stylesheet-same-origin.sub.html: >+ * web-platform-tests/css/cssom/stylesheet-title.html: >+ * web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-count.html: >+ * web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-tree-order.html: >+ * web-platform-tests/css/cssom/ttwf-cssom-document-extension.html: >+ * web-platform-tests/css/cssom/variable-names.html: >+ * web-platform-tests/css/cssom/w3c-import.log: >+ * web-platform-tests/css/geometry/interfaces-expected.txt: >+ * web-platform-tests/css/mediaqueries/media-queries-001.xht: Added. >+ * web-platform-tests/css/mediaqueries/media-queries-002.xht: Added. >+ * web-platform-tests/css/mediaqueries/media-queries-003.xht: Added. >+ * web-platform-tests/css/mediaqueries/test_media_queries.html: >+ * web-platform-tests/css/mediaqueries/viewport-script-dynamic-expected.html: Added. >+ * web-platform-tests/css/mediaqueries/viewport-script-dynamic.html: Added. >+ * web-platform-tests/css/mediaqueries/w3c-import.log: >+ * web-platform-tests/css/selectors/CHANGES: Added. >+ * web-platform-tests/css/selectors/Makefile: Added. >+ * web-platform-tests/css/selectors/README: Added. >+ * web-platform-tests/css/selectors/TODO: Added. >+ * web-platform-tests/css/selectors/anplusb-selector-parsing.html: Added. >+ * web-platform-tests/css/selectors/any-link-dynamic-001-expected.html: Added. >+ * web-platform-tests/css/selectors/any-link-dynamic-001.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/semantics.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html: Added. >+ * web-platform-tests/css/selectors/attribute-selectors/attribute-case/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/child-indexed-pseudo-class.html: Added. >+ * web-platform-tests/css/selectors/css3-modsel-1.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-10.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-100.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-100b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-101.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-101b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-102.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-102b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-103.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-103b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-104.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-104b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-105.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-105b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-106.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-106b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-107.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-107b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-108.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-108b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-109.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-109b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-11.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-110.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-110b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-111.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-111b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-112.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-112b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-113.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-113b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-114.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-114b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-115.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-115b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-116.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-116b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-117.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-117b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-118.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-119.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-12.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-120.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-121.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-122.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-123.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-123b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-124.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-124b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-125.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-125b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-126.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-126b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-127.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-127b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-128.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-128b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-129.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-129b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-13.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-130.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-130b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-131.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-131b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-132.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-132b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-133.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-133b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-134.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-134b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-135.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-135b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-136.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-136b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-137.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-137b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-138.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-138b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-139.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-139b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-14.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-140.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-140b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-141.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-141b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-142.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-142b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-143.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-143b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-144.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-145a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-145b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-146a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-146b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-147a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-147b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-148.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-149.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-149b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-14b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-14c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-14d.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-14e.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-15.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-150.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-151.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-152.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-153.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-154.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-155.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-155a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-155b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-155c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-155d.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-156.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-156b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-156c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-157.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-158.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-159.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-15b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-15c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-16.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-160.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-161.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-162.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-164.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-165.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-166.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-166a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-167.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-167a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-168.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-168a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-169.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-169a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-17.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-170.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-170a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-170b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-170c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-170d.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-171.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-172a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-172b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-173a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-173b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-174a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-174b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-175a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-175b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-175c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-176.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-177a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-177b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-178.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-179.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-179a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-18.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion: Added. >+ * web-platform-tests/css/selectors/css3-modsel-180a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-181.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-182.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-183.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184d.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184e.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-184f.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-18a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-18b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-18c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-19.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-19a.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-19b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-2.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-20.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-21.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-21b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-21c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-22.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-23.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-24.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-25.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-27.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-27a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-27b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-28.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-28b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-28c.pl-draft: Added. >+ (nest): >+ (nthChild): >+ * web-platform-tests/css/selectors/css3-modsel-29.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-29b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-3.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-30.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-31.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-32.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-33.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-34.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-35.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-36.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-37.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-38.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-39.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-39a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-39b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-39c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-3a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-4.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-40.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-41.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-41a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-42.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-42a.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-43.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-43b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-44.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-44b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-44c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-44d.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-45.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-45b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-45c.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-46.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-46b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-47.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-48.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-49.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-5.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-50.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-51.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-52.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-53.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-54.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-55.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-56.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-57.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-57b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-58.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-59.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-6.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-60.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-61.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-62.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-63.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-64.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-65.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-66.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-66b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-67.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-68.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-69.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-7.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-70.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-72.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-72b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-73.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-73b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-74.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-74b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-75.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-75b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-76.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-76b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-77.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-77b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-78.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-78b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-79.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-7b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system: Added. >+ * web-platform-tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system: Added. >+ * web-platform-tests/css/selectors/css3-modsel-8.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-80.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-81.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-81b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-82.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-82b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-83.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-86.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-87.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-87b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-88.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-88b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-89.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-9.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-90.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-90b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-91.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-92.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-93.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-94.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-94b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-95.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-96.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-96b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-97.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-97b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-98.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-98b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-99.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-99b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d1.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d1b.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d2.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d3.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d4.xml: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5a.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5b.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5c.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5d.xml-removed: Added. >+ * web-platform-tests/css/selectors/css3-modsel-d5e.xml-removed: Added. >+ * web-platform-tests/css/selectors/focus-visible-005.html: Added. >+ * web-platform-tests/css/selectors/htaccess: Added. >+ * web-platform-tests/css/selectors/html-full.css: Added. >+ (pre.rules): >+ (.WARNING): >+ (div.testSource): >+ (div.testDescription): >+ (.testDescription): >+ (.testDescription th,): >+ (.testDescription th): >+ (.testDescription .a): >+ (.testDescription .b): >+ (.testDescription .c): >+ (div.validator): >+ (div.validator img): >+ * web-platform-tests/css/selectors/html-shell.css: Added. >+ (pre.rules): >+ (.WARNING): >+ (div.testSource): >+ (div.testDescription): >+ (.testDescription): >+ (.testDescription th,): >+ (.testDescription th): >+ (.testDescription .a): >+ (.testDescription .b): >+ (.testDescription .c): >+ (div.validator): >+ (div.validator img): >+ (iframe, object): >+ * web-platform-tests/css/selectors/i18n/OWNERS: Added. >+ * web-platform-tests/css/selectors/i18n/README: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-001.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-002.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-004.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-005.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-006.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-007.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-008.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-009.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-010.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-011.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-012.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-014.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-015.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-016.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-021.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-022.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-024.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-025.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-026.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-027.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-028.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-029.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-030.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-031.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-032.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-034.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-035.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-036.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-041.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-042.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-044.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-045.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-046.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-047.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-048.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-049.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-050.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-051.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-052.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-054.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-055.html: Added. >+ * web-platform-tests/css/selectors/i18n/css3-selectors-lang-056.html: Added. >+ * web-platform-tests/css/selectors/i18n/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/invalidation/any-link-pseudo.html: Added. >+ * web-platform-tests/css/selectors/invalidation/matches.html: Added. >+ * web-platform-tests/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html: Added. >+ * web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html: Added. >+ * web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html: Added. >+ * web-platform-tests/css/selectors/invalidation/sheet-going-away-002-expected.html: Added. >+ * web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html: Added. >+ * web-platform-tests/css/selectors/invalidation/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/matches-nested.html: Added. >+ * web-platform-tests/css/selectors/matches-specificity.html: Added. >+ * web-platform-tests/css/selectors/missing-right-token.html: Added. >+ * web-platform-tests/css/selectors/resources/blue15x15.png: Added. >+ * web-platform-tests/css/selectors/resources/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/root-siblings.htm: Added. >+ * web-platform-tests/css/selectors/selection-image-001-expected.html: Added. >+ * web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html: Added. >+ * web-platform-tests/css/selectors/selection-image-001-noref.html: Added. >+ * web-platform-tests/css/selectors/selection-image-001.html: Added. >+ * web-platform-tests/css/selectors/selection-image-002-expected.html: Added. >+ * web-platform-tests/css/selectors/selection-image-002.html: Added. >+ * web-platform-tests/css/selectors/selector-structural-pseudo-root-expected.html: Added. >+ * web-platform-tests/css/selectors/selector-structural-pseudo-root.html: Added. >+ * web-platform-tests/css/selectors/selectors-attr-white-space-001-expected.html: Added. >+ * web-platform-tests/css/selectors/selectors-attr-white-space-001.html: Added. >+ * web-platform-tests/css/selectors/selectors-empty-001-expected.xml: Added. >+ * web-platform-tests/css/selectors/selectors-empty-001.xml: Added. >+ * web-platform-tests/css/selectors/selectors-namespace-001-expected.xml: Added. >+ * web-platform-tests/css/selectors/selectors-namespace-001.xml: Added. >+ * web-platform-tests/css/selectors/tng.css: Added. >+ (BODY): >+ (A:link): >+ (A:visited): >+ (.navigation): >+ (OBJECT): >+ * web-platform-tests/css/selectors/user-invalid.html: Added. >+ * web-platform-tests/css/selectors/utils/generators.pm: Added. >+ (extensions): >+ (generateTopIndex): >+ (generateSubIndex): >+ (generateMiniTestIndex): >+ (generateTestTypeIndex): >+ (generateFlatTestIndex): >+ (generateShellTestIndex): >+ (generateMiniTest): >+ (generateFlatTest): >+ (generateShell): >+ (print_mini_xhtml): >+ (print_mini_html): >+ (print_mini_xml): >+ (print_flat_xhtml): >+ (print_flat_html): >+ (print_flat_xml): >+ (print_shell_xhtml_iframe): >+ (print_shell_xhtml_object): >+ (print_shell_xhtml_frames): >+ (print_shell_html_iframe): >+ (print_shell_html_object): >+ (print_shell_tng): >+ (print_shell_html_frames): >+ (print_shell_xlink_embed): >+ * web-platform-tests/css/selectors/utils/helpers.pm: Added. >+ (qualifyStartTag): >+ (matchContext): >+ (shortlistTestsForDestination): >+ (shortlistTestsForTypes): >+ (readCache): >+ (writeCache): >+ (escape): >+ * web-platform-tests/css/selectors/utils/parser.pm: Added. >+ (Init): >+ (Start): >+ (CdataStart): >+ (CdataEnd): >+ (Comment): >+ (Proc): >+ (Char): >+ (End): >+ (Final): >+ (processElement): >+ (applicable): >+ * web-platform-tests/css/selectors/utils/w3c-import.log: Added. >+ * web-platform-tests/css/selectors/w3c-import.log: >+ * web-platform-tests/css/selectors/xhtml-full.css: Added. >+ (@namespace url(http://www.w3.org/1999/xhtml);): >+ (.WARNING): >+ (div.testText): >+ (div.testSource): >+ (div.testDescription): >+ (.testDescription): >+ (.testDescription th,): >+ (.testDescription th): >+ (.testDescription .a): >+ (.testDescription .b): >+ (.testDescription .c): >+ (div.validator): >+ (div.validator img): >+ * web-platform-tests/css/selectors/xhtml-shell.css: Added. >+ (@namespace url(http://www.w3.org/1999/xhtml);): >+ (.WARNING): >+ (div.testSource): >+ (div.testDescription): >+ (.testDescription): >+ (.testDescription th,): >+ (.testDescription th): >+ (.testDescription .a): >+ (.testDescription .b): >+ (.testDescription .c): >+ (div.validator): >+ (div.validator img): >+ (iframe, object): >+ * web-platform-tests/css/selectors/xml-full.css: Added. >+ (test): >+ (title): >+ (author): >+ (metadata): >+ (item): >+ (name): >+ (data): >+ (data:link): >+ (data:visited): >+ (requirement): >+ (content): >+ (source): >+ (css): >+ (xml): >+ * web-platform-tests/css/selectors/xml-shell.css: Added. >+ (test): >+ (title): >+ (author): >+ (metadata): >+ (item): >+ (name): >+ (data): >+ (data:link): >+ (data:visited): >+ (requirement): >+ (content): >+ (source): >+ (css): >+ (xml): >+ * web-platform-tests/css/support/blue32x32.ico: Added. >+ * web-platform-tests/css/support/grid.css: Added. >+ (.grid): >+ (.inline-grid): >+ (.firstRowFirstColumn): >+ (.onlyFirstRowOnlyFirstColumn): >+ (.firstRowSecondColumn): >+ (.onlyFirstRowOnlySecondColumn): >+ (.secondRowFirstColumn): >+ (.onlySecondRowOnlyFirstColumn): >+ (.secondRowSecondColumn): >+ (.onlySecondRowOnlySecondColumn): >+ (.endSecondRowEndSecondColumn): >+ (.thirdRowSecondColumn): >+ (.firstRowThirdColumn): >+ (.secondRowThirdColumn): >+ (.firstRowFourthColumn): >+ (.secondRowFourthColumn): >+ (.firstAutoRowSecondAutoColumn): >+ (.autoLastRowAutoLastColumn): >+ (.autoSecondRowAutoFirstColumn): >+ (.firstRowBothColumn): >+ (.secondRowBothColumn): >+ (.bothRowFirstColumn): >+ (.bothRowSecondColumn): >+ (.bothRowBothColumn): >+ (.autoRowAutoColumn): >+ (.firstRowAutoColumn): >+ (.secondRowAutoColumn): >+ (.thirdRowAutoColumn): >+ (.autoRowFirstColumn): >+ (.autoRowSecondColumn): >+ (.autoRowThirdColumn): >+ (.autoRowAutoColumnSpanning2): >+ (.autoRowSpanning2AutoColumn): >+ (.autoRowSpanning2AutoColumnSpanning3): >+ (.autoRowSpanning3AutoColumnSpanning2): >+ (.autoRowFirstColumnSpanning2): >+ (.autoRowSecondColumnSpanning2): >+ (.firstRowSpanning2AutoColumn): >+ (.secondRowSpanning2AutoColumn): >+ (.gridAutoFlowColumnSparse): >+ (.gridAutoFlowColumnDense): >+ (.gridAutoFlowRowSparse): >+ (.gridAutoFlowRowDense): >+ (.constrainedContainer): >+ (.unconstrainedContainer): >+ (.sizedToGridArea): >+ (.verticalRL): >+ (.verticalLR): >+ (.horizontalTB): >+ (.directionRTL): >+ (.directionLTR): >+ * web-platform-tests/css/support/w3c-import.log: >+ * web-platform-tests/custom-elements/Document-createElement-svg-expected.txt: Added. >+ * web-platform-tests/custom-elements/Document-createElement-svg.svg: Added. >+ * web-platform-tests/custom-elements/Document-createElementNS-expected.txt: Added. >+ * web-platform-tests/custom-elements/Document-createElementNS.html: Added. >+ * web-platform-tests/custom-elements/HTMLElement-constructor-expected.txt: >+ * web-platform-tests/custom-elements/HTMLElement-constructor.html: >+ * web-platform-tests/custom-elements/builtin-coverage-expected.txt: Added. >+ * web-platform-tests/custom-elements/builtin-coverage.html: Added. >+ * web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing-expected.txt: Added. >+ * web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html: Added. >+ * web-platform-tests/custom-elements/custom-element-registry/upgrade-expected.txt: Added. >+ * web-platform-tests/custom-elements/custom-element-registry/upgrade.html: Added. >+ * web-platform-tests/custom-elements/htmlconstructor/newtarget-expected.txt: >+ * web-platform-tests/custom-elements/htmlconstructor/newtarget.html: >+ * web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is-expected.txt: Added. >+ * web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html: Added. >+ * web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg-expected.txt: Added. >+ * web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg: Added. >+ * web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document-expected.txt: >+ * web-platform-tests/custom-elements/parser/serializing-html-fragments-expected.txt: Added. >+ * web-platform-tests/custom-elements/parser/serializing-html-fragments.html: Added. >+ * web-platform-tests/custom-elements/pseudo-class-defined-expected.txt: Added. >+ * web-platform-tests/custom-elements/pseudo-class-defined.html: Added. >+ * web-platform-tests/custom-elements/reactions/HTMLInputElement-expected.txt: Added. >+ * web-platform-tests/custom-elements/reactions/HTMLInputElement.html: Added. >+ * web-platform-tests/custom-elements/reactions/with-exceptions.html: Added. >+ * web-platform-tests/custom-elements/resources/my-custom-element-html-document.html: Added. >+ * web-platform-tests/custom-elements/upgrading/Document-importNode-expected.txt: Added. >+ * web-platform-tests/custom-elements/upgrading/Document-importNode.html: Added. >+ * web-platform-tests/custom-elements/w3c-import.log: >+ * web-platform-tests/device-memory/OWNERS: Added. >+ * web-platform-tests/device-memory/device-memory.https.any-expected.txt: Added. >+ * web-platform-tests/device-memory/device-memory.https.any.html: Added. >+ * web-platform-tests/device-memory/device-memory.https.any.js: Added. >+ (test): >+ * web-platform-tests/device-memory/device-memory.https.any.worker-expected.txt: Added. >+ * web-platform-tests/device-memory/device-memory.https.any.worker.html: Added. >+ * web-platform-tests/device-memory/w3c-import.log: Added. >+ * web-platform-tests/dom/OWNERS: >+ * web-platform-tests/dom/events/Event-returnValue-expected.txt: >+ * web-platform-tests/dom/events/Event-returnValue.html: >+ * web-platform-tests/dom/events/event-global.worker-expected.txt: Added. >+ * web-platform-tests/dom/events/event-global.worker.html: Added. >+ * web-platform-tests/dom/events/event-global.worker.js: Added. >+ * web-platform-tests/dom/events/relatedTarget.window.js: Added. >+ (test): >+ (test.t.input.oninput.t.step_func): >+ * web-platform-tests/dom/events/w3c-import.log: >+ * web-platform-tests/dom/historical-expected.txt: >+ * web-platform-tests/dom/historical.html: >+ * web-platform-tests/dom/interfaces-expected.txt: >+ * web-platform-tests/dom/interfaces.html: >+ * web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt: >+ * web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html: >+ * web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js: >+ (test_getElementsByTagName): >+ * web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js: >+ (test_getElementsByTagNameNS): >+ * web-platform-tests/dom/nodes/Document-constructor-expected.txt: >+ * web-platform-tests/dom/nodes/Document-constructor.html: >+ * web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log: >+ * web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt: Added. >+ * web-platform-tests/dom/nodes/Document-getElementsByClassName.html: Added. >+ * web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt: >+ * web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt: >+ * web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt: >+ * web-platform-tests/dom/nodes/Element-getElementsByClassName.html: >+ * web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt: >+ * web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt: >+ * web-platform-tests/dom/nodes/Node-childNodes-expected.txt: >+ * web-platform-tests/dom/nodes/Node-childNodes.html: >+ * web-platform-tests/dom/nodes/Node-cloneNode-expected.txt: >+ * web-platform-tests/dom/nodes/Node-cloneNode.html: >+ * web-platform-tests/dom/nodes/Node-normalize-expected.txt: >+ * web-platform-tests/dom/nodes/Node-normalize.html: >+ * web-platform-tests/dom/nodes/ParentNode-children-expected.txt: Added. >+ * web-platform-tests/dom/nodes/ParentNode-children.html: Added. >+ * web-platform-tests/dom/nodes/getElementsByClassName-30-expected.txt: >+ * web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt: Added. >+ * web-platform-tests/dom/nodes/query-target-in-load-event.html: Added. >+ * web-platform-tests/dom/nodes/query-target-in-load-event.part.html: Added. >+ * web-platform-tests/dom/nodes/w3c-import.log: >+ * web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt: Added. >+ * web-platform-tests/dom/ranges/Range-intersectsNode-2.html: Added. >+ * web-platform-tests/dom/ranges/w3c-import.log: >+ * web-platform-tests/dom/traversal/NodeIterator.html: >+ * web-platform-tests/domparsing/interfaces.any-expected.txt: Added. >+ * web-platform-tests/domparsing/interfaces.any.html: Added. >+ * web-platform-tests/domparsing/interfaces.any.js: Added. >+ (promise_test.async): >+ * web-platform-tests/domparsing/interfaces.any.worker-expected.txt: Added. >+ * web-platform-tests/domparsing/interfaces.any.worker.html: Added. >+ * web-platform-tests/domparsing/w3c-import.log: >+ * web-platform-tests/domparsing/xmldomparser-expected.txt: Added. >+ * web-platform-tests/domparsing/xmldomparser.html: Added. >+ * web-platform-tests/eventsource/eventsource-constructor-non-same-origin-expected.txt: >+ * web-platform-tests/eventsource/eventsource-cross-origin-expected.txt: >+ * web-platform-tests/eventsource/interfaces-expected.txt: >+ * web-platform-tests/eventsource/request-cache-control-expected.txt: >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9C.pem: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9D.pem: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cacert.pem: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cakey.pem: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr.old: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.old: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.key: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.pem: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial.old: Added. >+ * web-platform-tests/fetch/Release/layout-test-results/wptwk_process_log.out.txt: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD6.pem: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD7.pem: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cacert.pem: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cakey.pem: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt: Renamed from LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xml. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr.old: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.old: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.key: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.pem: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial.old: Added. >+ * web-platform-tests/fetch/api/basic/Release/layout-test-results/wptwk_process_log.out.txt: Added. >+ * web-platform-tests/fetch/api/basic/mode-same-origin.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt: >+ * web-platform-tests/fetch/api/basic/scheme-about.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/basic/scheme-blob-expected.txt: >+ * web-platform-tests/fetch/api/basic/scheme-others-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-multiple-origins-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-preflight-star.any-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-preflight-status.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/cors/cors-redirect-preflight.any.worker-expected.txt: >+ * web-platform-tests/fetch/api/policies/referrer-origin-expected.txt: >+ * web-platform-tests/fetch/api/redirect/redirect-count-expected.txt: >+ * web-platform-tests/fetch/api/redirect/redirect-count-worker-expected.txt: >+ * web-platform-tests/fetch/api/redirect/redirect-location-expected.txt: >+ * web-platform-tests/fetch/api/redirect/redirect-schemes-expected.txt: >+ * web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker-expected.txt: >+ * web-platform-tests/fetch/api/request/request-keepalive-quota-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/001-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/002-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/003-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/004-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/005-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-expected.txt: >+ * web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-expected.txt: >+ * web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt: >+ * web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt: >+ * web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt: >+ * web-platform-tests/html/syntax/parsing/html5lib_tests21-expected.txt: >+ * web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt: >+ * web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt: >+ * web-platform-tests/server-timing/cross_origin-expected.txt: >+ * web-platform-tests/server-timing/resource_timing_idl-expected.txt: >+ * web-platform-tests/server-timing/resource_timing_idl.https-expected.txt: >+ * web-platform-tests/server-timing/server_timing_header-parsing-expected.txt: >+ * web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt: >+ * web-platform-tests/server-timing/service_worker_idl-expected.txt: >+ * web-platform-tests/service-workers/service-worker/fetch-event-redirect.https-expected.txt: >+ * web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt: >+ * web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https-expected.txt: >+ * web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt: >+ * web-platform-tests/service-workers/service-worker/registration-security-error.https-expected.txt: >+ * web-platform-tests/streams/readable-streams/bad-underlying-sources-expected.txt: >+ * web-platform-tests/streams/readable-streams/bad-underlying-sources.dedicatedworker-expected.txt: >+ * web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt: >+ * web-platform-tests/streams/readable-streams/garbage-collection-expected.txt: >+ * web-platform-tests/streams/readable-streams/garbage-collection.dedicatedworker-expected.txt: >+ * web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt: >+ * web-platform-tests/url/url-setters-expected.txt: >+ * web-platform-tests/w3c-import.log: >+ * web-platform-tests/wake-lock/OWNERS: Added. >+ * web-platform-tests/wake-lock/interfaces.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/interfaces.https.html: Added. >+ * web-platform-tests/wake-lock/w3c-import.log: Added. >+ * web-platform-tests/wake-lock/wakelock-api.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-api.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-applicability-manual.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-applicability-manual.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-cancel-twice.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-cancel-twice.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html: Added. >+ * web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers: Added. >+ * web-platform-tests/wake-lock/wakelock-document-hidden.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-document-hidden.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html: Added. >+ * web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers: Added. >+ * web-platform-tests/wake-lock/wakelock-insecure-context-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-insecure-context.html: Added. >+ * web-platform-tests/wake-lock/wakelock-onactivechange.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-onactivechange.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-promise.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-promise.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-state-is-global.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-state-is-global.https.html: Added. >+ * web-platform-tests/wake-lock/wakelock-type.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelock-type.https.html: Added. >+ * web-platform-tests/wake-lock/wakelockrequest-is-independent.https-expected.txt: Added. >+ * web-platform-tests/wake-lock/wakelockrequest-is-independent.https.html: Added. >+ * web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt: >+ * web-platform-tests/webaudio/js/helpers.js: >+ (trimEmptyElements): >+ * web-platform-tests/webaudio/resources/audio-param.js: Added. >+ (audioParamLinearRamp): >+ (audioParamExponentialRamp): >+ (audioParamSetTarget): >+ (audioParamSetValueCurve): >+ * web-platform-tests/webaudio/resources/audionodeoptions.js: Added. >+ (testAudioNodeOptions): >+ (initializeContext): >+ (testInvalidConstructor): >+ (testDefaultConstructor): >+ (testDefaultAttributes): >+ * web-platform-tests/webaudio/resources/biquad-testing.js: Added. >+ (createImpulseBuffer): >+ (createTestAndRun): >+ (generateReference): >+ (checkFilterResponse): >+ * web-platform-tests/webaudio/resources/mix-testing.js: Added. >+ (createToneBuffer): >+ * web-platform-tests/webaudio/resources/mixing-rules.js: Added. >+ (createShiftedImpulseBuffer): >+ (stringifyBuffer): >+ (computeNumberOfChannels): >+ (speakersSum): >+ (discreteSum): >+ (processUpMix): >+ (processDownMix): >+ * web-platform-tests/webaudio/resources/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/w3c-import.log: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/w3c-import.log: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audionode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js: Added. >+ (doTest): >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/zero-output-processor.js: Added. >+ (ZeroOuttputProcessor): >+ (ZeroOuttputProcessor.prototype.process): >+ * web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/w3c-import.log: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test-expected.txt: Removed. >+ * web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html: Removed. >+ * web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test-expected.txt: Removed. >+ * web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html: Removed. >+ * web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt: >+ * web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/w3c-import.log: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/w3c-import.log: >+ * web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper-expected.txt: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html: Added. >+ * web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/w3c-import.log: >+ * web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html: >+ * web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https-expected.txt: >+ * web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https.html: >+ * web-platform-tests/webrtc/RTCIceTransport.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.html: Removed. >+ * web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-helper.js: >+ * web-platform-tests/webrtc/RTCPeerConnection-peerIdentity.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt: >+ * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-expected.txt: >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html: >+ * web-platform-tests/webrtc/RTCPeerConnection-track-stats.https-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html: Added. >+ * web-platform-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html: >+ * web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html: >+ * web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html: >+ * web-platform-tests/webrtc/RTCRtpSender-getStats.https.html: >+ * web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt: Added. >+ * web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize.html: Added. >+ * web-platform-tests/webrtc/identity-helper.js: Removed. >+ * web-platform-tests/webrtc/identity-helper.sub.js: Added. >+ (parseAssertionResult): >+ (getIdpDomains): >+ (assert_rtcerror_rejection): >+ (set hostString): >+ * web-platform-tests/webrtc/protocol/README.txt: Added. >+ * web-platform-tests/webrtc/protocol/video-codecs.https-expected.txt: Added. >+ * web-platform-tests/webrtc/protocol/video-codecs.https.html: Added. >+ * web-platform-tests/webrtc/protocol/w3c-import.log: Added. >+ * web-platform-tests/webrtc/tools/README.md: Added. >+ * web-platform-tests/webrtc/tools/package-lock.json: Added. >+ * web-platform-tests/webrtc/tools/package.json: Added. >+ * web-platform-tests/webrtc/tools/w3c-import.log: Added. >+ * web-platform-tests/webrtc/w3c-import.log: >+ * web-platform-tests/webxr/OWNERS: Added. >+ * web-platform-tests/webxr/interfaces.https-expected.txt: Added. >+ * web-platform-tests/webxr/interfaces.https.html: Added. >+ * web-platform-tests/webxr/resources/w3c-import.log: Added. >+ * web-platform-tests/webxr/resources/webxr_check.html: Added. >+ * web-platform-tests/webxr/resources/webxr_util.js: Added. >+ (forEachWebxrObject): >+ * web-platform-tests/webxr/w3c-import.log: Added. >+ * web-platform-tests/webxr/webxr_availability.http.sub-expected.txt: Added. >+ * web-platform-tests/webxr/webxr_availability.http.sub.html: Added. >+ * web-platform-tests/workers/SharedWorkerPerformanceNow-expected.txt: Added. >+ * web-platform-tests/workers/SharedWorkerPerformanceNow.html: Added. >+ * web-platform-tests/workers/SharedWorker_dataUrl-expected.txt: Added. >+ * web-platform-tests/workers/SharedWorker_dataUrl.html: Added. >+ * web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame-expected.txt: Added. >+ * web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame.htm: Added. >+ * web-platform-tests/workers/WorkerPerformanceNow-expected.txt: Added. >+ * web-platform-tests/workers/WorkerPerformanceNow.html: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005-expected.txt: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005.html: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/w3c-import.log: >+ * web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1.headers: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null.headers: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined.headers: Added. >+ * web-platform-tests/workers/interfaces/WorkerUtils/importScripts/w3c-import.log: >+ * web-platform-tests/workers/modules/dedicated-worker-import-csp-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-csp.html: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-failure-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-failure.html: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-meta-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import-meta.html: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-import.html: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-options-credentials-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-options-credentials.html: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-options-credentials.html.headers: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-options-type-expected.txt: Added. >+ * web-platform-tests/workers/modules/dedicated-worker-options-type.html: Added. >+ * web-platform-tests/workers/modules/resources/credentials.py: Added. >+ (main): >+ * web-platform-tests/workers/modules/resources/dynamic-import-and-then-static-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/dynamic-import-given-url-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/dynamic-import-remote-origin-script-worker.sub.js: Added. >+ * web-platform-tests/workers/modules/resources/dynamic-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/empty-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/eval-dynamic-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/export-on-dynamic-import-script.js: Added. >+ * web-platform-tests/workers/modules/resources/export-on-load-script.js: Added. >+ * web-platform-tests/workers/modules/resources/export-on-load-script.js.headers: Added. >+ * web-platform-tests/workers/modules/resources/export-on-static-import-script.js: Added. >+ * web-platform-tests/workers/modules/resources/import-meta-url-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/import-scripts-worker.js: Added. >+ (catch): >+ * web-platform-tests/workers/modules/resources/nested-dynamic-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/new-worker-window.html: Added. >+ * web-platform-tests/workers/modules/resources/post-message-on-load-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/static-import-and-then-dynamic-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/static-import-non-existent-script-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/static-import-remote-origin-script-worker.sub.js: Added. >+ * web-platform-tests/workers/modules/resources/static-import-worker.js: Added. >+ * web-platform-tests/workers/modules/resources/w3c-import.log: Added. >+ * web-platform-tests/workers/modules/w3c-import.log: Added. >+ * web-platform-tests/workers/name-property.html: >+ * web-platform-tests/workers/nested_worker.worker.js: >+ (async_test): >+ * web-platform-tests/workers/opaque-origin.html: >+ * web-platform-tests/workers/semantics/structured-clone/dedicated-expected.txt: >+ * web-platform-tests/workers/support/WorkerSendingPerformanceNow.js: Added. >+ (calcResponse): >+ (self.onmessage): >+ (port.onmessage): >+ * web-platform-tests/workers/support/iframe_sw_dataUrl.html: Added. >+ * web-platform-tests/workers/support/w3c-import.log: >+ * web-platform-tests/workers/w3c-import.log: >+ * web-platform-testwarning: inexact rename detection was skipped due to too many files.: Added. >+ > 2018-05-31 Manuel Rego Casasnovas <rego@igalia.com> > > [css-text] Update test suite >diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations >index 09492eb446f6630d64a99e994a0ddab2e2f5fd32..9a91963213bafc4110d4b622bd80904c4d9bcf85 100644 >--- a/LayoutTests/TestExpectations >+++ b/LayoutTests/TestExpectations >@@ -560,8 +560,6 @@ imported/w3c/web-platform-tests/html/semantics/document-metadata/the-meta-elemen > webkit.org/b/64861 imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-ltr-001.html [ ImageOnlyFailure ] > webkit.org/b/64861 imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-rtl-001.html [ ImageOnlyFailure ] > imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-001.html [ ImageOnlyFailure ] >-imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-002.html [ ImageOnlyFailure ] >-imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-003.html [ ImageOnlyFailure ] > imported/w3c/web-platform-tests/css/selectors/selector-read-write-type-change-002.html [ ImageOnlyFailure ] > imported/w3c/web-platform-tests/css/selectors/selector-required-type-change-002.html [ ImageOnlyFailure ] > >@@ -1423,7 +1421,6 @@ workers/wasm-long-compile.html [ Slow ] > # Flaky WebCrypto API tests > imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html [ Pass Failure ] > imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.html [ Pass Failure Slow ] >-imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html [ Pass Failure ] > > # WebCryptoAPI tests that take too long to complete > imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.html [ Skip ] >@@ -2010,3 +2007,157 @@ webkit.org/b/48451 animations/3d/transform-origin-vs-functions.html [ Pass Failu > webkit.org/b/184800 http/tests/workers/worker-importScripts-banned-mimetype.html [ Pass Timeout ] > > webkit.org/b/184802 http/tests/security/contentTypeOptions/nosniff-importScript-blocked.html [ Pass Timeout ] >+ >+imported/w3c/web-platform-tests/acid/acid2/reftest.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/acid/acid3/test.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/acid/acid3/empty.html [ Failure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/display-contents-button.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-ui/text-overflow-029.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/selectors/selection-image-002.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-ui/text-overflow-028.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/display-contents-details.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/cssom-view/scroll-behavior-smooth.html [ Skip ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-ui/text-overflow-026.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-ui/text-overflow-027.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/selectors/selection-image-001.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht [ ImageOnlyFailure ] >+imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg [ Skip ] >+imported/w3c/web-platform-tests/html/browsers/history/the-history-interface/combination_history_005.html [ Timeout Pass ] >+imported/w3c/web-platform-tests/workers/semantics/structured-clone/dedicated.html [ Failure ] >+imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker.html [ Failure ] >+imported/w3c/web-platform-tests/custom-elements/reactions/with-exceptions.html [ Skip ] >+imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.html [ Failure ] >+imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html [ Failure Pass ] >+imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg.svg [ Skip ] >+imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-002.html [ ImageOnlyFailure Pass ] >+imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-resources.https.html [ Failure Pass ] >+imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html [ Failure Pass ] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt >index d9750756ebd099311897491ea58d405eee57797c..138919934b54bb50b21d8c4c378f52b5a614d6c3 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt >@@ -3,27 +3,27 @@ PASS createImageBitmap from an HTMLCanvasElement, and drawImage on the created I > PASS createImageBitmap from an HTMLCanvasElement scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLCanvasElement scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLCanvasElement resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from an HTMLCanvasElement with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from an HTMLCanvasElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from an HTMLVideoElement, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from an HTMLVideoElement with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from an HTMLVideoElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from an HTMLVideoElement from a data URL, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement from a data URL scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement from a data URL scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from an HTMLVideoElement from a data URL resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from an HTMLVideoElement from a data URL with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from an HTMLVideoElement from a data URL with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from a bitmap HTMLImageElement, and drawImage on the created ImageBitmap > PASS createImageBitmap from a bitmap HTMLImageElement scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from a bitmap HTMLImageElement scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from a bitmap HTMLImageElement resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from a bitmap HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from a bitmap HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from a vector HTMLImageElement, and drawImage on the created ImageBitmap > PASS createImageBitmap from a vector HTMLImageElement scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from a vector HTMLImageElement scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from a vector HTMLImageElement resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from a vector HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from a vector HTMLImageElement with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > FAIL createImageBitmap from a bitmap SVGImageElement, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error" > FAIL createImageBitmap from a bitmap SVGImageElement scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error" > FAIL createImageBitmap from a bitmap SVGImageElement scaled up, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: Type error" >@@ -43,15 +43,15 @@ FAIL createImageBitmap from an ImageData, and drawImage on the created ImageBitm > FAIL createImageBitmap from an ImageData scaled down, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented" > FAIL createImageBitmap from an ImageData scaled up, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented" > FAIL createImageBitmap from an ImageData resized, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented" >-FAIL createImageBitmap from an ImageData with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "TypeError: createImageBitmap with ImageData is not implemented" >+FAIL createImageBitmap from an ImageData with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from an ImageBitmap, and drawImage on the created ImageBitmap > PASS createImageBitmap from an ImageBitmap scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from an ImageBitmap scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from an ImageBitmap resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from an ImageBitmap with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from an ImageBitmap with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > PASS createImageBitmap from a Blob, and drawImage on the created ImageBitmap > PASS createImageBitmap from a Blob scaled down, and drawImage on the created ImageBitmap > PASS createImageBitmap from a Blob scaled up, and drawImage on the created ImageBitmap > PASS createImageBitmap from a Blob resized, and drawImage on the created ImageBitmap >-PASS createImageBitmap from a Blob with negative sw/sh, and drawImage on the created ImageBitmap >+FAIL createImageBitmap from a Blob with negative sw/sh, and drawImage on the created ImageBitmap promise_test: Unhandled rejection with value: object "RangeError: Cannot create ImageBitmap with a negative width or height" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html >index ebda395b758387e868092dcc9be6ed8ea53dfffd..030263472a36c76f7ce15256187a658ed6b77cf7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html >@@ -8,20 +8,19 @@ > <script src="common.sub.js"></script> > <div id=log></div> > <script> >-let worker, tests = {}; >+let worker, continuations = {}; > setup(function() { > worker = new Worker("transfer-worker.js"); > worker.addEventListener("message", function(event) { > let { name, bitmap } = event.data; >- tests[name](bitmap); >+ if (continuations.hasOwnProperty(name)) { >+ continuations[name](bitmap); >+ } > }); > }); > > for (let { name, factory } of imageSourceTypes) { > promise_test(function(t) { >- let message_handler = new Promise(function(resolve) { >- tests[t.name] = resolve; >- }); > return factory().then(createImageBitmap).then(function(bitmap) { > assert_equals(bitmap.width, 20); > assert_equals(bitmap.height, 20); >@@ -31,7 +30,9 @@ for (let { name, factory } of imageSourceTypes) { > assert_equals(bitmap.width, 0); > assert_equals(bitmap.height, 0); > >- return message_handler; >+ return new Promise(function(resolve) { >+ continuations[t.name] = resolve; >+ }); > }).then(function(bitmap) { > assert_class_string(bitmap, "ImageBitmap"); > assert_equals(bitmap.width, 20); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/w3c-import.log >index 01be627bd3fc28cbc68a98482bb4fec8bcff36de..c8b42711cf724d1982fedbb58c7143136e002f18 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/w3c-import.log >@@ -19,3 +19,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html > /LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html > /LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html >+/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html >+/LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/transfer-worker.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..9cc0eff9fd27ff31f34c64222976322b62fe206a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/OWNERS >@@ -0,0 +1 @@ >+@beverloo >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1592ff6255870dc9d27f022527246586ed0e5dfc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any-expected.txt >@@ -0,0 +1,25 @@ >+ >+FAIL Background Sync interfaces. promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.html b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.js b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..207a0d5d684a8cc9cedd60219304348e9565394a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.js >@@ -0,0 +1,21 @@ >+// META: script=/resources/WebIDLParser.js >+// META: script=/resources/idlharness.js >+ >+'use strict'; >+ >+// https://wicg.github.io/BackgroundSync/spec/ >+ >+promise_test(async () => { >+ const idl = await fetch('/interfaces/BackgroundSync.idl').then(r => r.text()); >+ const sw = await fetch('/interfaces/ServiceWorker.idl').then(r => r.text()); >+ const html = await fetch('/interfaces/html.idl').then(r => r.text()); >+ const dom = await fetch('/interfaces/dom.idl').then(r => r.text()); >+ >+ const idlArray = new IdlArray(); >+ idlArray.add_idls(idl); >+ idlArray.add_dependency_idls(sw); >+ idlArray.add_dependency_idls(html); >+ idlArray.add_dependency_idls(dom); >+ idlArray.test(); >+ done(); >+}, 'Background Sync interfaces.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1592ff6255870dc9d27f022527246586ed0e5dfc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker-expected.txt >@@ -0,0 +1,25 @@ >+ >+FAIL Background Sync interfaces. promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..4e25fcdd62a67840c1605fd7d43bcaaa2319489c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/BackgroundSync/interfaces.any.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/CODEOWNERS b/LayoutTests/imported/w3c/web-platform-tests/CODEOWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..e35f9232079afd605290616111ca2d662abb52e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/CODEOWNERS >@@ -0,0 +1,2 @@ >+# Prevent accidentially touching CSS submodules >+/css/tools/ @plinss @kojiishi @jgraham @gsnedders >diff --git a/LayoutTests/imported/w3c/web-platform-tests/CONTRIBUTING.md b/LayoutTests/imported/w3c/web-platform-tests/CONTRIBUTING.md >index d0852318dd63e7cd5bd23e7f4bedfb7067fb4379..427ec682793f7eb074577ebb07dd4e24e1bb02f2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/CONTRIBUTING.md >+++ b/LayoutTests/imported/w3c/web-platform-tests/CONTRIBUTING.md >@@ -31,4 +31,4 @@ specification. All content is provided as-is to help reach interoperability. > Documentation > ------------- > >-See [web-platform-tests.org](http://web-platform-tests.org/). >+See [web-platform-tests.org](https://web-platform-tests.org/). >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/file_test2.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/file_test2.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/w3c-import.log >index 06ae8c12c3a6fd0e05dae873053ffbb1edc97ea8..d58eaac94f97d6fab44a4d33507440cb935a9f2b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/w3c-import.log >@@ -14,6 +14,4 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >-/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/file_test1.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/file_test2.txt >-/LayoutTests/imported/w3c/web-platform-tests/FileAPI/BlobURL/support/file_test3.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/support/file_test1.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/support/file_test1.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c1c8d1a05172bafd030faffeebb26a11348158f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 7: InvalidStateError: The object is in an invalid state. >+ >+Harness Error (FAIL), message = InvalidStateError: The object is in an invalid state. >+ >+TIMEOUT FileReader created after a worker self.close() Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e114eeaf86ff55e6944bff0b17a099f6d8a02f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/FileReader/workers.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+async_test(t => { >+ function workerCode() { >+ close(); >+ var blob = new Blob([123]); >+ var fr = new FileReader(); >+ fr.readAsText(blob); >+ fr.abort() >+ fr.readAsArrayBuffer(blob); >+ postMessage(true); >+ } >+ >+ var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {type:"application/javascript"}); >+ >+ var w = new Worker(URL.createObjectURL(workerBlob)); >+ w.onmessage = function(e) { >+ assert_true(e.data, "FileReader created during worker shutdown."); >+ t.done(); >+ } >+}, 'FileReader created after a worker self.close()'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1e0a15d3fd9f0548101a556c9c62b66b1860b29f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings-expected.txt >@@ -0,0 +1,47 @@ >+ >+PASS Valid "endings" value: "transparent" >+PASS Valid "endings" value: "native" >+PASS Invalid "endings" value: null >+PASS Invalid "endings" value: "" >+PASS Invalid "endings" value: "invalidEnumValue" >+PASS Invalid "endings" value: "Transparent" >+PASS Invalid "endings" value: "NATIVE" >+PASS Invalid "endings" value: 0 >+PASS Invalid "endings" value: {} >+PASS Exception propagation from options >+PASS The "endings" options property is used >+PASS Input LF with endings unspecified >+PASS Input LF with endings 'transparent' >+PASS Input LF with endings 'native' >+PASS Input CR with endings unspecified >+PASS Input CR with endings 'transparent' >+PASS Input CR with endings 'native' >+PASS Input CRLF with endings unspecified >+PASS Input CRLF with endings 'transparent' >+PASS Input CRLF with endings 'native' >+PASS Input CRCR with endings unspecified >+PASS Input CRCR with endings 'transparent' >+PASS Input CRCR with endings 'native' >+PASS Input LFCR with endings unspecified >+PASS Input LFCR with endings 'transparent' >+PASS Input LFCR with endings 'native' >+PASS Input LFLF with endings unspecified >+PASS Input LFLF with endings 'transparent' >+PASS Input LFLF with endings 'native' >+PASS Input CRCRLF with endings unspecified >+PASS Input CRCRLF with endings 'transparent' >+PASS Input CRCRLF with endings 'native' >+PASS Input CRLFLF with endings unspecified >+PASS Input CRLFLF with endings 'transparent' >+PASS Input CRLFLF with endings 'native' >+PASS Input CRLFCR with endings unspecified >+PASS Input CRLFCR with endings 'transparent' >+PASS Input CRLFCR with endings 'native' >+PASS Input CRLFCRLF with endings unspecified >+PASS Input CRLFCRLF with endings 'transparent' >+PASS Input CRLFCRLF with endings 'native' >+PASS Input LFCRLFCR with endings unspecified >+PASS Input LFCRLFCR with endings 'transparent' >+PASS Input LFCRLFCR with endings 'native' >+PASS CR/LF in adjacent input strings >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1dee99ff775da3562194719be06b711c246b30ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html >@@ -0,0 +1,104 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>Blob constructor: endings option</title> >+<link rel=help href="https://w3c.github.io/FileAPI/#constructorBlob"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+// Windows platforms use CRLF as the native line ending. All others use LF. >+const crlf = navigator.platform.startsWith('Win'); >+const native_ending = crlf ? '\r\n' : '\n'; >+ >+function readBlobAsPromise(blob) { >+ return new Promise((resolve, reject) => { >+ const reader = new FileReader(); >+ reader.readAsText(blob); >+ reader.onload = e => resolve(reader.result); >+ reader.onerror = e => reject(reader.error); >+ }); >+} >+ >+[ >+ 'transparent', >+ 'native' >+].forEach(value => test(t => { >+ assert_class_string(new Blob([], {endings: value}), 'Blob', >+ `Constructor should allow "${value}" endings`); >+}, `Valid "endings" value: ${JSON.stringify(value)}`)); >+ >+[ >+ null, >+ '', >+ 'invalidEnumValue', >+ 'Transparent', >+ 'NATIVE', >+ 0, >+ {} >+].forEach(value => test(t => { >+ assert_throws(new TypeError(), () => new Blob([], {endings: value}), >+ 'Blob constructor should throw'); >+}, `Invalid "endings" value: ${JSON.stringify(value)}`)); >+ >+test(t => { >+ const test_error = {name: 'test'}; >+ assert_throws( >+ test_error, >+ () => new Blob([], { get endings() { throw test_error; }}), >+ 'Blob constructor should propagate exceptions from "endings" property'); >+}, 'Exception propagation from options'); >+ >+test(t => { >+ let got = false; >+ new Blob([], { get endings() { got = true; } }); >+ assert_true(got, 'The "endings" property was accessed during construction.'); >+}, 'The "endings" options property is used'); >+ >+[ >+ {name: 'LF', input: '\n', native: native_ending}, >+ {name: 'CR', input: '\r', native: native_ending}, >+ >+ {name: 'CRLF', input: '\r\n', native: native_ending}, >+ {name: 'CRCR', input: '\r\r', native: native_ending.repeat(2)}, >+ {name: 'LFCR', input: '\n\r', native: native_ending.repeat(2)}, >+ {name: 'LFLF', input: '\n\n', native: native_ending.repeat(2)}, >+ >+ {name: 'CRCRLF', input: '\r\r\n', native: native_ending.repeat(2)}, >+ {name: 'CRLFLF', input: '\r\n\n', native: native_ending.repeat(2)}, >+ {name: 'CRLFCR', input: '\r\n\r\n', native: native_ending.repeat(2)}, >+ >+ {name: 'CRLFCRLF', input: '\r\n\r\n', native: native_ending.repeat(2)}, >+ {name: 'LFCRLFCR', input: '\n\r\n\r', native: native_ending.repeat(3)}, >+ >+].forEach(testCase => { >+ promise_test(async t => { >+ const blob = new Blob([testCase.input]); >+ assert_equals( >+ await readBlobAsPromise(blob), testCase.input, >+ 'Newlines should not change with endings unspecified'); >+ }, `Input ${testCase.name} with endings unspecified`); >+ >+ promise_test(async t => { >+ const blob = new Blob([testCase.input], {endings: 'transparent'}); >+ assert_equals( >+ await readBlobAsPromise(blob), testCase.input, >+ 'Newlines should not change with endings "transparent"'); >+ }, `Input ${testCase.name} with endings 'transparent'`); >+ >+ promise_test(async t => { >+ const blob = new Blob([testCase.input], {endings: 'native'}); >+ assert_equals( >+ await readBlobAsPromise(blob), testCase.native, >+ 'Newlines should match the platform with endings "native"'); >+ }, `Input ${testCase.name} with endings 'native'`); >+}); >+ >+promise_test(async t => { >+ const blob = new Blob(['\r', '\n'], {endings: 'native'}); >+ const expected = native_ending.repeat(2); >+ assert_equals( >+ await readBlobAsPromise(blob), expected, >+ 'CR/LF in adjacent strings should be converted to two platform newlines'); >+}, `CR/LF in adjacent input strings`); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/w3c-import.log >index f81e3683fcf1b13e64dff774ea0f9e211a2cf692..9ae9f1d64ef2fb2f6e4472151f8527a7e423d945 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-endings.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-in-worker.worker.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-slice-overflow.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..01f97b7cf5060402a55ee341d5063f805442e3c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings-expected.txt >@@ -0,0 +1,47 @@ >+ >+PASS Valid "endings" value: "transparent" >+PASS Valid "endings" value: "native" >+PASS Invalid "endings" value: null >+PASS Invalid "endings" value: "" >+PASS Invalid "endings" value: "invalidEnumValue" >+PASS Invalid "endings" value: "Transparent" >+PASS Invalid "endings" value: "NATIVE" >+PASS Invalid "endings" value: 0 >+PASS Invalid "endings" value: {} >+PASS Exception propagation from options >+PASS The "endings" options property is used >+PASS Input LF with endings unspecified >+PASS Input LF with endings 'transparent' >+PASS Input LF with endings 'native' >+PASS Input CR with endings unspecified >+PASS Input CR with endings 'transparent' >+FAIL Input CR with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n" but got "\r" >+PASS Input CRLF with endings unspecified >+PASS Input CRLF with endings 'transparent' >+FAIL Input CRLF with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n" but got "\r\n" >+PASS Input CRCR with endings unspecified >+PASS Input CRCR with endings 'transparent' >+FAIL Input CRCR with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\r\r" >+PASS Input LFCR with endings unspecified >+PASS Input LFCR with endings 'transparent' >+FAIL Input LFCR with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\n\r" >+PASS Input LFLF with endings unspecified >+PASS Input LFLF with endings 'transparent' >+PASS Input LFLF with endings 'native' >+PASS Input CRCRLF with endings unspecified >+PASS Input CRCRLF with endings 'transparent' >+FAIL Input CRCRLF with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\r\r\n" >+PASS Input CRLFLF with endings unspecified >+PASS Input CRLFLF with endings 'transparent' >+FAIL Input CRLFLF with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\r\n\n" >+PASS Input CRLFCR with endings unspecified >+PASS Input CRLFCR with endings 'transparent' >+FAIL Input CRLFCR with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\r\n\r\n" >+PASS Input CRLFCRLF with endings unspecified >+PASS Input CRLFCRLF with endings 'transparent' >+FAIL Input CRLFCRLF with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n" but got "\r\n\r\n" >+PASS Input LFCRLFCR with endings unspecified >+PASS Input LFCRLFCR with endings 'transparent' >+FAIL Input LFCRLFCR with endings 'native' assert_equals: Newlines should match the platform with endings "native" expected "\n\n\n" but got "\n\r\n\r" >+FAIL CR/LF in adjacent input strings assert_equals: CR/LF in adjacent strings should be converted to two platform newlines expected "\n\n" but got "\r\n" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f0f9090768f48e25fb7fd47e5cd182bf11f065e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/File-constructor-endings.html >@@ -0,0 +1,104 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>File constructor: endings option</title> >+<link rel=help href="https://w3c.github.io/FileAPI/#file-constructor"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+// Windows platforms use CRLF as the native line ending. All others use LF. >+const crlf = navigator.platform.startsWith('Win'); >+const native_ending = crlf ? '\r\n' : '\n'; >+ >+function readBlobAsPromise(blob) { >+ return new Promise((resolve, reject) => { >+ const reader = new FileReader(); >+ reader.readAsText(blob); >+ reader.onload = e => resolve(reader.result); >+ reader.onerror = e => reject(reader.error); >+ }); >+} >+ >+[ >+ 'transparent', >+ 'native' >+].forEach(value => test(t => { >+ assert_class_string(new File([], "name", {endings: value}), 'File', >+ `Constructor should allow "${value}" endings`); >+}, `Valid "endings" value: ${JSON.stringify(value)}`)); >+ >+[ >+ null, >+ '', >+ 'invalidEnumValue', >+ 'Transparent', >+ 'NATIVE', >+ 0, >+ {} >+].forEach(value => test(t => { >+ assert_throws(new TypeError(), () => new File([], "name", {endings: value}), >+ 'File constructor should throw'); >+}, `Invalid "endings" value: ${JSON.stringify(value)}`)); >+ >+test(t => { >+ const test_error = {name: 'test'}; >+ assert_throws( >+ test_error, >+ () => new File([], "name", { get endings() { throw test_error; }}), >+ 'File constructor should propagate exceptions from "endings" property'); >+}, 'Exception propagation from options'); >+ >+test(t => { >+ let got = false; >+ new File([], "name", { get endings() { got = true; } }); >+ assert_true(got, 'The "endings" property was accessed during construction.'); >+}, 'The "endings" options property is used'); >+ >+[ >+ {name: 'LF', input: '\n', native: native_ending}, >+ {name: 'CR', input: '\r', native: native_ending}, >+ >+ {name: 'CRLF', input: '\r\n', native: native_ending}, >+ {name: 'CRCR', input: '\r\r', native: native_ending.repeat(2)}, >+ {name: 'LFCR', input: '\n\r', native: native_ending.repeat(2)}, >+ {name: 'LFLF', input: '\n\n', native: native_ending.repeat(2)}, >+ >+ {name: 'CRCRLF', input: '\r\r\n', native: native_ending.repeat(2)}, >+ {name: 'CRLFLF', input: '\r\n\n', native: native_ending.repeat(2)}, >+ {name: 'CRLFCR', input: '\r\n\r\n', native: native_ending.repeat(2)}, >+ >+ {name: 'CRLFCRLF', input: '\r\n\r\n', native: native_ending.repeat(2)}, >+ {name: 'LFCRLFCR', input: '\n\r\n\r', native: native_ending.repeat(3)}, >+ >+].forEach(testCase => { >+ promise_test(async t => { >+ const file = new File([testCase.input], "name"); >+ assert_equals( >+ await readBlobAsPromise(file), testCase.input, >+ 'Newlines should not change with endings unspecified'); >+ }, `Input ${testCase.name} with endings unspecified`); >+ >+ promise_test(async t => { >+ const file = new File([testCase.input], "name", {endings: 'transparent'}); >+ assert_equals( >+ await readBlobAsPromise(file), testCase.input, >+ 'Newlines should not change with endings "transparent"'); >+ }, `Input ${testCase.name} with endings 'transparent'`); >+ >+ promise_test(async t => { >+ const file = new File([testCase.input], "name", {endings: 'native'}); >+ assert_equals( >+ await readBlobAsPromise(file), testCase.native, >+ 'Newlines should match the platform with endings "native"'); >+ }, `Input ${testCase.name} with endings 'native'`); >+}); >+ >+promise_test(async t => { >+ const file = new File(['\r', '\n'], "name", {endings: 'native'}); >+ const expected = native_ending.repeat(2); >+ assert_equals( >+ await readBlobAsPromise(file), expected, >+ 'CR/LF in adjacent strings should be converted to two platform newlines'); >+}, `CR/LF in adjacent input strings`); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b0de1ca6d1d1c05994f257a30e050468e037b98d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Upload file-for-upload-in-form.txt (ASCII) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a3e5b183a04f1de9ee7079d869f3ead669c520d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL Upload file-for-upload-in-form.txt (ASCII) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ï°ïïï .txt (x-user-defined) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â˺ðŸËâ.txt (windows-1252) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â æâ .txt (JIS X 0201 and JIS X 0208) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-âºð.txt (Unicode) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ABC~â¾Â¥â¤・ã»â¢â·â¼â æðæâ â¼Â·ââ¢ã»ï½¥Â¤âÂ¥â¾~XYZ.txt (Unicode) in ISO-2022-JP form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..421de301298ba55a70124290066eaf66e6416394 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-iso-2022-jp.tentative.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Upload files in ISO-2022-JP form (tentative)</title> >+<!-- >+ NOTE: This test is tentative because encoding for filename >+ characters unrepresentable in the form charset is not yet >+ standardized. >+ --> >+<link rel="help" >+ href="https://github.com/whatwg/html/issues/3223"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist"> >+<link rel="help" >+ href="https://w3c.github.io/FileAPI/#file-constructor"> >+<link rel="author" title="Benjamin C. Wiley Sittler" >+ href="mailto:bsittler@chromium.org"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../support/send-file-form-helper.js"></script> >+<script> >+'use strict'; >+ >+formPostFileUploadTest({ >+ fileNameSource: 'ASCII', >+ fileBaseName: 'file-for-upload-in-form.txt', >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: 'file-for-upload-in-form.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'x-user-defined', >+ fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt', >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: ( >+ 'file-for-upload-in-form-.txt'), >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'windows-1252', >+ fileBaseName: 'file-for-upload-in-form-â˺ðŸËâ.txt', >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: ( >+ 'file-for-upload-in-form-☺😂.txt'), >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'JIS X 0201 and JIS X 0208', >+ fileBaseName: 'file-for-upload-in-form-â æâ .txt', >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: 'file-for-upload-in-form-\x1B$B!z@1!z\x1B(B.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: 'file-for-upload-in-form-âºð.txt', >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`, >+ formEncoding: 'ISO-2022-JP', >+ expectedEncodedBaseName: `file-for-upload-in-form-${ >+ kTestFallbackIso2022jp >+ }.txt`, >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4601f0703d886e804e30b289ae3b7a4712ad4583 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL Upload file-for-upload-in-form.txt (ASCII) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ï°ïïï .txt (x-user-defined) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â˺ðŸËâ.txt (windows-1252) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â æâ .txt (JIS X 0201 and JIS X 0208) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-âºð.txt (Unicode) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ABC~â¾Â¥â¤・ã»â¢â·â¼â æðæâ â¼Â·ââ¢ã»ï½¥Â¤âÂ¥â¾~XYZ.txt (Unicode) in UTF-8 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8.html >new file mode 100644 >index 0000000000000000000000000000000000000000..03417ba72e4c2cccef3ff17f4e41bba76cc598bb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-utf-8.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Upload files in UTF-8 form</title> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist"> >+<link rel="help" >+ href="https://w3c.github.io/FileAPI/#file-constructor"> >+<link rel="author" title="Benjamin C. Wiley Sittler" >+ href="mailto:bsittler@chromium.org"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../support/send-file-form-helper.js"></script> >+<script> >+'use strict'; >+ >+formPostFileUploadTest({ >+ fileNameSource: 'ASCII', >+ fileBaseName: 'file-for-upload-in-form.txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: 'file-for-upload-in-form.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'x-user-defined', >+ fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: ( >+ 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt'), >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'windows-1252', >+ fileBaseName: 'file-for-upload-in-form-â˺ðŸËâ.txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: 'file-for-upload-in-form-â˺ðŸËâ.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'JIS X 0201 and JIS X 0208', >+ fileBaseName: 'file-for-upload-in-form-â æâ .txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: 'file-for-upload-in-form-â æâ .txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: 'file-for-upload-in-form-âºð.txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: 'file-for-upload-in-form-âºð.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`, >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: `file-for-upload-in-form-${kTestChars}.txt`, >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..016ab08ef099dbc3359b57d81d801322a0b1e549 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL Upload file-for-upload-in-form.txt (ASCII) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ï°ïïï .txt (x-user-defined) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â˺ðŸËâ.txt (windows-1252) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â æâ .txt (JIS X 0201 and JIS X 0208) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-âºð.txt (Unicode) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ABC~â¾Â¥â¤・ã»â¢â·â¼â æðæâ â¼Â·ââ¢ã»ï½¥Â¤âÂ¥â¾~XYZ.txt (Unicode) in windows-1252 form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e9463f83aecb47ba1da1aa30d1903508e279937 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-windows-1252.tentative.html >@@ -0,0 +1,70 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Upload files in Windows-1252 form (tentative)</title> >+<!-- >+ NOTE: This test is tentative because encoding for filename >+ characters unrepresentable in the form charset is not yet >+ standardized. >+ --> >+<link rel="help" >+ href="https://github.com/whatwg/html/issues/3223"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist"> >+<link rel="help" >+ href="https://w3c.github.io/FileAPI/#file-constructor"> >+<link rel="author" title="Benjamin C. Wiley Sittler" >+ href="mailto:bsittler@chromium.org"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../support/send-file-form-helper.js"></script> >+<script> >+'use strict'; >+ >+formPostFileUploadTest({ >+ fileNameSource: 'ASCII', >+ fileBaseName: 'file-for-upload-in-form.txt', >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: 'file-for-upload-in-form.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'x-user-defined', >+ fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt', >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: ( >+ 'file-for-upload-in-form-.txt'), >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'windows-1252', >+ fileBaseName: 'file-for-upload-in-form-â˺ðŸËâ.txt', >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: 'file-for-upload-in-form-âºð.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'JIS X 0201 and JIS X 0208', >+ fileBaseName: 'file-for-upload-in-form-â æâ .txt', >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: 'file-for-upload-in-form-★星★.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: 'file-for-upload-in-form-âºð.txt', >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`, >+ formEncoding: 'windows-1252', >+ expectedEncodedBaseName: `file-for-upload-in-form-${ >+ kTestFallbackWindows1252 >+ }.txt`, >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a23123d225912e55bc3d0fee5f0e809d5bcfe6b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL Upload file-for-upload-in-form.txt (ASCII) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ï°ïïï .txt (x-user-defined) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â˺ðŸËâ.txt (windows-1252) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-â æâ .txt (JIS X 0201 and JIS X 0208) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-âºð.txt (Unicode) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+FAIL Upload file-for-upload-in-form-ABC~â¾Â¥â¤・ã»â¢â·â¼â æðæâ â¼Â·ââ¢ã»ï½¥Â¤âÂ¥â¾~XYZ.txt (Unicode) in x-user-defined form promise_test: Unhandled rejection with value: object "TypeError: function is not a constructor (evaluating 'new DataTransfer')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..072e3bb1e02ea0ccc0e5442c1cae316acb40ce30 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form-x-user-defined.tentative.html >@@ -0,0 +1,70 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Upload files in x-user-defined form (tentative)</title> >+<!-- >+ NOTE: This test is tentative because encoding for filename >+ characters unrepresentable in the form charset is not yet >+ standardized. >+ --> >+<link rel="help" >+ href="https://github.com/whatwg/html/issues/3223"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist"> >+<link rel="help" >+ href="https://w3c.github.io/FileAPI/#file-constructor"> >+<link rel="author" title="Benjamin C. Wiley Sittler" >+ href="mailto:bsittler@chromium.org"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../support/send-file-form-helper.js"></script> >+<script> >+'use strict'; >+ >+formPostFileUploadTest({ >+ fileNameSource: 'ASCII', >+ fileBaseName: 'file-for-upload-in-form.txt', >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: 'file-for-upload-in-form.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'x-user-defined', >+ fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt', >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: 'file-for-upload-in-form-ð .txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'windows-1252', >+ fileBaseName: 'file-for-upload-in-form-â˺ðŸËâ.txt', >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: ('file-for-upload-in-form-' + >+ '☺😂.txt'), >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'JIS X 0201 and JIS X 0208', >+ fileBaseName: 'file-for-upload-in-form-â æâ .txt', >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: 'file-for-upload-in-form-★星★.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: 'file-for-upload-in-form-âºð.txt', >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt', >+}); >+ >+formPostFileUploadTest({ >+ fileNameSource: 'Unicode', >+ fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`, >+ formEncoding: 'x-user-defined', >+ expectedEncodedBaseName: `file-for-upload-in-form-${ >+ kTestFallbackXUserDefined >+ }.txt`, >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form.html >new file mode 100644 >index 0000000000000000000000000000000000000000..baa8d4286c5789c55168cebf5496982b20d06083 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/file/send-file-form.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Upload ASCII-named file in UTF-8 form</title> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data"> >+<link rel="help" >+ href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist"> >+<link rel="help" >+ href="https://w3c.github.io/FileAPI/#file-constructor"> >+<link rel="author" title="Benjamin C. Wiley Sittler" >+ href="mailto:bsittler@chromium.org"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../support/send-file-form-helper.js"></script> >+<script> >+'use strict'; >+ >+formPostFileUploadTest({ >+ fileNameSource: 'ASCII', >+ fileBaseName: 'file-for-upload-in-form.txt', >+ formEncoding: 'UTF-8', >+ expectedEncodedBaseName: 'file-for-upload-in-form.txt', >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt >index 432b314af3ae4b980345667a23e0be008d7406f9..51c65c500b85efee9c68c01f3953f437b1876040 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt >@@ -2,10 +2,14 @@ > PASS "toNativeLineEndings" should not be supported > FAIL "FileError" should not be supported assert_false: expected false got true > PASS "FileException" should not be supported >+PASS "FileHandle" should not be supported >+PASS "FileRequest" should not be supported >+PASS "MutableFile" should not be supported > PASS Blob should not support slice prefixed > PASS BlobBuilder should not be supported. > PASS createFor method should not be supported > PASS Blob.close() should not be supported >+PASS File's lastModifiedDate should not be supported > PASS Service worker test setup > FAIL "FileReaderSync" should not be supported in service workers assert_false: expected false got true > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https.html >index 9d78b5690fbbe7a377874e59473d32d654445310..4f841f1763945946a4e2445a85a23b5d4326c386 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https.html >@@ -10,17 +10,20 @@ > <body> > <div id="log"></div> > <script> >- test(function() { >- assert_false('toNativeLineEndings' in window); >- }, '"toNativeLineEndings" should not be supported'); >+ var removedFromWindow = [ >+ 'toNativeLineEndings', >+ 'FileError', >+ 'FileException', >+ 'FileHandle', >+ 'FileRequest', >+ 'MutableFile', >+ ]; > >- test(function() { >- assert_false('FileError' in window); >- }, '"FileError" should not be supported'); >- >- test(function() { >- assert_false('FileException' in window); >- }, '"FileException" should not be supported'); >+ removedFromWindow.forEach(function(name) { >+ test(function() { >+ assert_false(name in window); >+ }, '"' + name + '" should not be supported'); >+ }); > > test(function() { > var b = new Blob(); >@@ -50,9 +53,13 @@ > assert_false('isClosed' in Blob.prototype, 'isClosed in Blob.prototype'); > }, 'Blob.close() should not be supported'); > >- // Only add service worker test if service workers are actually supported. >- if (navigator.serviceWorker) >- service_worker_test('support/historical-serviceworker.js', 'Service worker test setup'); >+ test(() => { >+ const f = new File([], ""); >+ assert_false("lastModifiedDate" in f); >+ assert_false("lastModifiedDate" in File.prototype); >+ }, "File's lastModifiedDate should not be supported"); >+ >+ service_worker_test('support/historical-serviceworker.js', 'Service worker test setup'); > </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads-expected.txt >index 551b602ee41fac49dea6407ec34f86c255549959..349419822e7a356758e2f9722d3d8126d9717733 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads-expected.txt >@@ -4,4 +4,5 @@ PASS test FileReader InvalidStateError exception for readAsDataURL > PASS test FileReader InvalidStateError exception for readAsArrayBuffer > PASS test FileReader InvalidStateError exception in onloadstart event for readAsArrayBuffer > PASS test FileReader no InvalidStateError exception in loadend event handler for readAsArrayBuffer >+FAIL test abort and restart in onloadstart event for readAsText The object is in an invalid state. > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads.html >index ca04f3c1819e88e74a4c2c4f8a738ad79321c544..310fa85a00d02732265f2b1c9c02f1c6dbc2504d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/FileReader-multiple-reads.html >@@ -70,4 +70,20 @@ async_test(function() { > reader.readAsArrayBuffer(blob_1) > assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING") > }, 'test FileReader no InvalidStateError exception in loadend event handler for readAsArrayBuffer'); >+ >+async_test(function() { >+ var blob_1 = new Blob([new Uint8Array(0x414141)]); >+ var blob_2 = new Blob(['TEST000000002']); >+ var reader = new FileReader(); >+ reader.onloadstart = this.step_func(function() { >+ reader.abort(); >+ reader.onloadstart = null; >+ reader.onloadend = this.step_func_done(function() { >+ assert_equals('TEST000000002', reader.result); >+ }); >+ reader.readAsText(blob_2); >+ }); >+ reader.readAsText(blob_1); >+}, 'test abort and restart in onloadstart event for readAsText'); >+ > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e8bb2ab3a8982742333e86ec55488d303a8ba12a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL FileAPI Test: filereader_readAsBinaryString assert_equals: expected 1 but got 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b550e4d0a96dc7e407e960be1bf43b5115037907 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>FileAPI Test: filereader_readAsBinaryString</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<link rel="help" href="https://w3c.github.io/FileAPI/#readAsBinaryString"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+async_test(t => { >+ const blob = new Blob(["Ï"]); >+ const reader = new FileReader(); >+ >+ reader.onload = t.step_func_done(() => { >+ assert_equals(typeof reader.result, "string", "The result is string"); >+ assert_equals(reader.result.length, 2, "The result length is 2"); >+ assert_equals(reader.result, "\xcf\x83", "The result is \xcf\x83"); >+ assert_equals(reader.readyState, reader.DONE); >+ }); >+ >+ reader.onloadstart = t.step_func(() => { >+ assert_equals(reader.readyState, reader.LOADING); >+ }); >+ >+ reader.onprogress = t.step_func(() => { >+ assert_equals(reader.readyState, reader.LOADING); >+ }); >+ >+ reader.readAsBinaryString(blob); >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/w3c-import.log >index d6b9800cf722f74d32a53a2d3884baafb44052df..760e26223da47552bcb711bd517b95bd1b40ad8c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/w3c-import.log >@@ -20,6 +20,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_abort.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_error.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsArrayBuffer.html >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsBinaryString.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsDataURL.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readAsText.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/reading-data-section/filereader_readystate.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/send-file-form-helper.js b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/send-file-form-helper.js >new file mode 100644 >index 0000000000000000000000000000000000000000..a7522c7b08ebc2451637e91dbd6a07040af4939d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/send-file-form-helper.js >@@ -0,0 +1,249 @@ >+'use strict'; >+ >+// Rationale for this particular test character sequence, which is >+// used in filenames and also in file contents: >+// >+// - ABC~ ensures the string starts with something we can read to >+// ensure it is from the correct source; ~ is used because even >+// some 1-byte otherwise-ASCII-like parts of ISO-2022-JP >+// interpret it differently. >+// - â¾Â¥ are inside a single-byte range of ISO-2022-JP and help >+// diagnose problems due to filesystem encoding or locale >+// - â is inside IBM437 and helps diagnose problems due to filesystem >+// encoding or locale >+// - ¤ is inside Latin-1 and helps diagnose problems due to >+// filesystem encoding or locale; it is also the "simplest" case >+// needing substitution in ISO-2022-JP >+// - ï½¥ is inside a single-byte range of ISO-2022-JP in some variants >+// and helps diagnose problems due to filesystem encoding or locale; >+// on the web it is distinct when decoding but unified when encoding >+// - ã» is inside a double-byte range of ISO-2022-JP and helps >+// diagnose problems due to filesystem encoding or locale >+// - ⢠is inside Windows-1252 and helps diagnose problems due to >+// filesystem encoding or locale and also ensures these aren't >+// accidentally turned into e.g. control codes >+// - â is inside IBM437 and helps diagnose problems due to filesystem >+// encoding or locale >+// - · is inside Latin-1 and helps diagnose problems due to >+// filesystem encoding or locale and also ensures HTML named >+// character references (e.g. ·) are not used >+// - â¼ is inside IBM437 shadowing C0 and helps diagnose problems due to >+// filesystem encoding or locale and also ensures these aren't >+// accidentally turned into e.g. control codes >+// - â is inside ISO-2022-JP on a non-Kanji page and makes correct >+// output easier to spot >+// - æ is inside ISO-2022-JP on a Kanji page and makes correct >+// output easier to spot >+// - ð is outside the BMP and makes incorrect surrogate pair >+// substitution detectable and ensures substitutions work >+// correctly immediately after Kanji 2-byte ISO-2022-JP >+// - æ repeated here ensures the correct codec state is used >+// after a non-BMP substitution >+// - â repeated here also makes correct output easier to spot >+// - â¼ is inside IBM437 shadowing C0 and helps diagnose problems due to >+// filesystem encoding or locale and also ensures these aren't >+// accidentally turned into e.g. control codes and also ensures >+// substitutions work correctly immediately after non-Kanji >+// 2-byte ISO-2022-JP >+// - · is inside Latin-1 and helps diagnose problems due to >+// filesystem encoding or locale and also ensures HTML named >+// character references (e.g. ·) are not used >+// - â is inside IBM437 and helps diagnose problems due to filesystem >+// encoding or locale >+// - ⢠is inside Windows-1252 and again helps diagnose problems >+// due to filesystem encoding or locale >+// - ã» is inside a double-byte range of ISO-2022-JP and helps >+// diagnose problems due to filesystem encoding or locale >+// - ï½¥ is inside a single-byte range of ISO-2022-JP in some variants >+// and helps diagnose problems due to filesystem encoding or locale; >+// on the web it is distinct when decoding but unified when encoding >+// - ¤ is inside Latin-1 and helps diagnose problems due to >+// filesystem encoding or locale; again it is a "simple" >+// substitution case >+// - â is inside IBM437 and helps diagnose problems due to filesystem >+// encoding or locale >+// - ¥⾠are inside a single-byte range of ISO-2022-JP and help >+// diagnose problems due to filesystem encoding or locale >+// - ~XYZ ensures earlier errors don't lead to misencoding of >+// simple ASCII >+// >+// Overall the near-symmetry makes common I18N mistakes like >+// off-by-1-after-non-BMP easier to spot. All the characters >+// are also allowed in Windows Unicode filenames. >+const kTestChars = 'ABC~â¾Â¥â¤・ã»â¢â·â¼â æðæâ â¼Â·ââ¢ã»ï½¥Â¤âÂ¥â¾~XYZ'; >+ >+// NOTE: The expected interpretation of ISO-2022-JP according to >+// https://encoding.spec.whatwg.org/#iso-2022-jp-encoder unifies >+// single-byte and double-byte katakana. >+const kTestFallbackIso2022jp = >+ ('ABC~\x1B(J~\\â¤\x1B$B!&!&\x1B(Bâ¢â·â¼\x1B$B!z@1\x1B(Bð' + >+ '\x1B$B@1!z\x1B(Bâ¼Â·ââ¢\x1B$B!&!&\x1B(B¤â\x1B(J\\~\x1B(B~XYZ').replace( >+ /[^\0-\x7F]/gu, >+ x => `&#${x.codePointAt(0)};`); >+ >+// NOTE: \uFFFD is used here to replace Windows-1252 bytes to match >+// how we will see them in the reflected POST bytes in a frame using >+// UTF-8 byte interpretation. The bytes will actually be intact, but >+// this code cannot tell and does not really care. >+const kTestFallbackWindows1252 = >+ 'ABC~â¾\xA5â\xA4ï½¥ã»\x95â\xB7â¼â æðæâ â¼\xB7â\x95ã»ï½¥\xA4â\xA5â¾~XYZ'.replace( >+ /[^\0-\xFF]/gu, >+ x => `&#${x.codePointAt(0)};`).replace(/[\x80-\xFF]/g, '\uFFFD'); >+ >+const kTestFallbackXUserDefined = >+ kTestChars.replace(/[^\0-\x7F]/gu, x => `&#${x.codePointAt(0)};`); >+ >+// formPostFileUploadTest - verifies multipart upload structure and >+// numeric character reference replacement for filenames, field names, >+// and field values. >+// >+// Uses /fetch/api/resources/echo-content.py to echo the upload >+// POST with UTF-8 byte interpretation, leading to the "UTF-8 goggles" >+// behavior documented below for expectedEncodedBaseName when non- >+// UTF-8-compatible byte sequences appear in the formEncoding-encoded >+// uploaded data. >+// >+// Fields in the parameter object: >+// >+// - fileNameSource: purely explanatory and gives a clue about which >+// character encoding is the source for the non-7-bit-ASCII parts of >+// the fileBaseName, or Unicode if no smaller-than-Unicode source >+// contains all the characters. Used in the test name. >+// - fileBaseName: the not-necessarily-just-7-bit-ASCII file basename >+// used for the constructed test file. Used in the test name. >+// - formEncoding: the acceptCharset of the form used to submit the >+// test file. Used in the test name. >+// - expectedEncodedBaseName: the expected formEncoding-encoded >+// version of fileBaseName with unencodable characters replaced by >+// numeric character references and non-7-bit-ASCII bytes seen >+// through UTF-8 goggles; subsequences not interpretable as UTF-8 >+// have each byte represented here by \uFFFD REPLACEMENT CHARACTER. >+const formPostFileUploadTest = ({ >+ fileNameSource, >+ fileBaseName, >+ formEncoding, >+ expectedEncodedBaseName, >+}) => { >+ promise_test(async testCase => { >+ >+ if (document.readyState !== 'complete') { >+ await new Promise(resolve => addEventListener('load', resolve)); >+ } >+ >+ const formTargetFrame = Object.assign(document.createElement('iframe'), { >+ name: 'formtargetframe', >+ }); >+ document.body.append(formTargetFrame); >+ testCase.add_cleanup(() => { >+ document.body.removeChild(formTargetFrame); >+ }); >+ >+ const form = Object.assign(document.createElement('form'), { >+ acceptCharset: formEncoding, >+ action: '/fetch/api/resources/echo-content.py', >+ method: 'POST', >+ enctype: 'multipart/form-data', >+ target: formTargetFrame.name, >+ }); >+ document.body.append(form); >+ testCase.add_cleanup(() => { >+ document.body.removeChild(form); >+ }); >+ >+ // Used to verify that the browser agrees with the test about >+ // which form charset is used. >+ form.append(Object.assign(document.createElement('input'), { >+ type: 'hidden', >+ name: '_charset_', >+ })); >+ >+ // Used to verify that the browser agrees with the test about >+ // field value replacement and encoding independently of file system >+ // idiosyncracies. >+ form.append(Object.assign(document.createElement('input'), { >+ type: 'hidden', >+ name: 'filename', >+ value: fileBaseName, >+ })); >+ >+ // Same, but with name and value reversed to ensure field names >+ // get the same treatment. >+ form.append(Object.assign(document.createElement('input'), { >+ type: 'hidden', >+ name: fileBaseName, >+ value: 'filename', >+ })); >+ >+ const fileInput = Object.assign(document.createElement('input'), { >+ type: 'file', >+ name: 'file', >+ }); >+ form.append(fileInput); >+ >+ // Removes c:\fakepath\ or other pseudofolder and returns just the >+ // final component of filePath; allows both / and \ as segment >+ // delimiters. >+ const baseNameOfFilePath = filePath => filePath.split(/[\/\\]/).pop(); >+ await new Promise(resolve => { >+ const dataTransfer = new DataTransfer; >+ dataTransfer.items.add( >+ new File([kTestChars], fileBaseName, {type: 'text/plain'})); >+ fileInput.files = dataTransfer.files; >+ // For historical reasons .value will be prefixed with >+ // c:\fakepath\, but the basename should match the file name >+ // exposed through the newer .files[0].name API. This check >+ // verifies that assumption. >+ assert_equals( >+ fileInput.files[0].name, >+ baseNameOfFilePath(fileInput.value), >+ `The basename of the field's value should match its files[0].name`); >+ form.submit(); >+ formTargetFrame.onload = resolve; >+ }); >+ >+ const formDataText = formTargetFrame.contentDocument.body.textContent; >+ const formDataLines = formDataText.split('\n'); >+ if (formDataLines.length && !formDataLines[formDataLines.length - 1]) { >+ --formDataLines.length; >+ } >+ assert_greater_than( >+ formDataLines.length, >+ 2, >+ `${fileBaseName}: multipart form data must have at least 3 lines: ${ >+ JSON.stringify(formDataText) >+ }`); >+ const boundary = formDataLines[0]; >+ assert_equals( >+ formDataLines[formDataLines.length - 1], >+ boundary + '--', >+ `${fileBaseName}: multipart form data must end with ${boundary}--: ${ >+ JSON.stringify(formDataText) >+ }`); >+ const expectedText = [ >+ boundary, >+ 'Content-Disposition: form-data; name="_charset_"', >+ '', >+ formEncoding, >+ boundary, >+ 'Content-Disposition: form-data; name="filename"', >+ '', >+ expectedEncodedBaseName, >+ boundary, >+ `Content-Disposition: form-data; name="${expectedEncodedBaseName}"`, >+ '', >+ 'filename', >+ boundary, >+ `Content-Disposition: form-data; name="file"; ` + >+ `filename="${expectedEncodedBaseName}"`, >+ 'Content-Type: text/plain', >+ '', >+ kTestChars, >+ boundary + '--', >+ ].join('\n'); >+ assert_true( >+ formDataText.startsWith(expectedText), >+ `Unexpected multipart-shaped form data received:\n${ >+ formDataText >+ }\nExpected:\n${expectedText}`); >+ }, `Upload ${fileBaseName} (${fileNameSource}) in ${formEncoding} form`); >+}; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/w3c-import.log >index 9966e38de1ac8d72c96263bc8080ba7f71f8ed1c..5345a3145fb893a6ba9011aff15daa11bde45472 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/w3c-import.log >@@ -18,5 +18,6 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/document-domain-setter.sub.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/historical-serviceworker.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/incumbent.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/send-file-form-helper.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/upload.txt > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/support/url-origin.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..96e8ab4209223aecb6cede963f3c2a10b93ce520 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode-expected.txt >@@ -0,0 +1,6 @@ >+ >+FAIL Test that strings are not NFC normalized by Blob constructor assert_equals: String should not be normalized expected "á½¹" but got "Ï" >+FAIL Test that strings are not NFC normalized by File constructor assert_equals: String should not be normalized expected "á½¹" but got "Ï" >+PASS Test that unpaired surrogates are replaced by Blob constructor >+PASS Test that unpaired surrogates are replaced by File constructor >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode.html b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ce3e3579d7c2c74c27d907ccd25c953588ef87f2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Blob/Unicode interaction: normalization and encoding</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+const OMICRON_WITH_OXIA = '\u1F79'; // NFC normalized to U+3CC >+const CONTAINS_UNPAIRED_SURROGATES = 'abc\uDC00def\uD800ghi'; >+const REPLACED = 'abc\uFFFDdef\uFFFDghi'; >+ >+function readBlobAsPromise(blob) { >+ return new Promise((resolve, reject) => { >+ const reader = new FileReader(); >+ reader.readAsText(blob); >+ reader.onload = () => resolve(reader.result); >+ reader.onerror = () => reject(reader.error); >+ }); >+} >+ >+promise_test(async t => { >+ const blob = new Blob([OMICRON_WITH_OXIA]); >+ const result = await readBlobAsPromise(blob); >+ assert_equals(result, OMICRON_WITH_OXIA, 'String should not be normalized'); >+}, 'Test that strings are not NFC normalized by Blob constructor'); >+ >+promise_test(async t => { >+ const file = new File([OMICRON_WITH_OXIA], 'name'); >+ const result = await readBlobAsPromise(file); >+ assert_equals(result, OMICRON_WITH_OXIA, 'String should not be normalized'); >+}, 'Test that strings are not NFC normalized by File constructor'); >+ >+promise_test(async t => { >+ const blob = new Blob([CONTAINS_UNPAIRED_SURROGATES]); >+ const result = await readBlobAsPromise(blob); >+ assert_equals(result, REPLACED, 'Unpaired surrogates should be replaced.'); >+}, 'Test that unpaired surrogates are replaced by Blob constructor'); >+ >+promise_test(async t => { >+ const file = new File([CONTAINS_UNPAIRED_SURROGATES], 'name'); >+ const result = await readBlobAsPromise(file); >+ assert_equals(result, REPLACED, 'Unpaired surrogates should be replaced.'); >+}, 'Test that unpaired surrogates are replaced by File constructor'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..a1bdb1b424da6ab1ddea7e37e68c53dec391b320 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/w3c-import.log >@@ -0,0 +1,21 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/create-helper.html >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/create-helper.js >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/fetch-tests.js >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/revoke-helper.html >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/resources/revoke-helper.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags-revoke.window.js b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags-revoke.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..f624f188fa82473d8ac5858eb46d850a9c9f4831 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags-revoke.window.js >@@ -0,0 +1,99 @@ >+async_test(t => { >+ const run_result = 'test_frame_OK'; >+ const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + >+ '<script>window.test_result = "' + run_result + '";</script>'; >+ const blob = new Blob([blob_contents], {type: 'text/html'}); >+ const url = URL.createObjectURL(blob); >+ >+ const frame = document.createElement('iframe'); >+ frame.setAttribute('src', url); >+ frame.setAttribute('style', 'display:none;'); >+ document.body.appendChild(frame); >+ URL.revokeObjectURL(url); >+ >+ frame.onload = t.step_func_done(() => { >+ assert_equals(frame.contentWindow.test_result, run_result); >+ }); >+}, 'Fetching a blob URL immediately before revoking it works in an iframe.'); >+ >+async_test(t => { >+ const run_result = 'test_frame_OK'; >+ const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + >+ '<script>window.test_result = "' + run_result + '";</script>'; >+ const blob = new Blob([blob_contents], {type: 'text/html'}); >+ const url = URL.createObjectURL(blob); >+ >+ const frame = document.createElement('iframe'); >+ frame.setAttribute('src', '/common/blank.html'); >+ frame.setAttribute('style', 'display:none;'); >+ document.body.appendChild(frame); >+ >+ frame.onload = t.step_func(() => { >+ frame.contentWindow.location = url; >+ URL.revokeObjectURL(url); >+ frame.onload = t.step_func_done(() => { >+ assert_equals(frame.contentWindow.test_result, run_result); >+ }); >+ }); >+}, 'Fetching a blob URL immediately before revoking it works in an iframe navigation.'); >+ >+async_test(t => { >+ const run_result = 'test_frame_OK'; >+ const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + >+ '<script>window.test_result = "' + run_result + '";</script>'; >+ const blob = new Blob([blob_contents], {type: 'text/html'}); >+ const url = URL.createObjectURL(blob); >+ const win = window.open(url); >+ URL.revokeObjectURL(url); >+ add_completion_callback(() => { win.close(); }); >+ >+ win.onload = t.step_func_done(() => { >+ assert_equals(win.test_result, run_result); >+ }); >+}, 'Opening a blob URL in a new window immediately before revoking it works.'); >+ >+function receive_message_on_channel(t, channel_name) { >+ const channel = new BroadcastChannel(channel_name); >+ return new Promise(resolve => { >+ channel.addEventListener('message', t.step_func(e => { >+ resolve(e.data); >+ })); >+ }); >+} >+ >+function window_contents_for_channel(channel_name) { >+ return '<!doctype html>\n' + >+ '<script>\n' + >+ 'new BroadcastChannel("' + channel_name + '").postMessage("foobar");\n' + >+ 'self.close();\n' + >+ '</script>'; >+} >+ >+async_test(t => { >+ const channel_name = 'noopener-window-test'; >+ const blob = new Blob([window_contents_for_channel(channel_name)], {type: 'text/html'}); >+ receive_message_on_channel(t, channel_name).then(t.step_func_done(t => { >+ assert_equals(t, 'foobar'); >+ })); >+ const url = URL.createObjectURL(blob); >+ const win = window.open(); >+ win.opener = null; >+ win.location = url; >+ URL.revokeObjectURL(url); >+}, 'Opening a blob URL in a noopener about:blank window immediately before revoking it works.'); >+ >+async_test(t => { >+ const run_result = 'test_script_OK'; >+ const blob_contents = 'window.script_test_result = "' + run_result + '";'; >+ const blob = new Blob([blob_contents]); >+ const url = URL.createObjectURL(blob); >+ >+ const e = document.createElement('script'); >+ e.setAttribute('src', url); >+ e.onload = t.step_func_done(() => { >+ assert_equals(window.script_test_result, run_result); >+ }); >+ >+ document.body.appendChild(e); >+ URL.revokeObjectURL(url); >+}, 'Fetching a blob URL immediately before revoking it works in <script> tags.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags.window.js b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags.window.js >index 364d33bb89d5e6bc4325e4097fdab1c52e19f7a4..f20b3599013bf5b4f305549f6dc85e5756a00908 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags.window.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags.window.js >@@ -31,7 +31,6 @@ async_test(t => { > }, 'Blob URLs can be used in iframes, and are treated same origin'); > > async_test(t => { >- const scroll_position = 5000; > const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + > '<style>body { margin: 0; } .block { height: 5000px; }</style>\n' + > '<body>\n' + >@@ -43,8 +42,7 @@ async_test(t => { > const frame = document.createElement('iframe'); > frame.setAttribute('src', url + '#block2'); > document.body.appendChild(frame); >- >- frame.onload = t.step_func_done(() => { >+ frame.contentWindow.onscroll = t.step_func_done(() => { > assert_equals(frame.contentWindow.scrollY, 5000); > }); > }, 'Blob URL fragment is implemented.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-reload.window.js b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-reload.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..d333b3a74aa82c58fafc5b3e5b0fab40730d13f1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-reload.window.js >@@ -0,0 +1,36 @@ >+function blob_url_reload_test(t, revoke_before_reload) { >+ const run_result = 'test_frame_OK'; >+ const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + >+ '<script>window.test_result = "' + run_result + '";</script>'; >+ const blob = new Blob([blob_contents], {type: 'text/html'}); >+ const url = URL.createObjectURL(blob); >+ >+ const frame = document.createElement('iframe'); >+ frame.setAttribute('src', url); >+ frame.setAttribute('style', 'display:none;'); >+ document.body.appendChild(frame); >+ >+ frame.onload = t.step_func(() => { >+ if (revoke_before_reload) >+ URL.revokeObjectURL(url); >+ assert_equals(frame.contentWindow.test_result, run_result); >+ frame.contentWindow.test_result = null; >+ frame.onload = t.step_func_done(() => { >+ assert_equals(frame.contentWindow.test_result, run_result); >+ }); >+ // Slight delay before reloading to ensure revoke actually has had a chance >+ // to be processed. >+ t.step_timeout(() => { >+ frame.contentWindow.location.reload(); >+ }, 250); >+ }); >+} >+ >+async_test(t => { >+ blob_url_reload_test(t, false); >+}, 'Reloading a blob URL succeeds.'); >+ >+ >+async_test(t => { >+ blob_url_reload_test(t, true); >+}, 'Reloading a blob URL succeeds even if the URL was revoked.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/w3c-import.log >index dee6448b84911c545f47e50f56bdc45b4b233c66..fbf21df501109d6fe449812df714d50708ca9db4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/w3c-import.log >@@ -22,6 +22,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags-revoke.window.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-in-tags.window.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-lifetime.html >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-reload.window.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-with-fetch.any.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url-with-xhr.any.js > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/url/url_xmlhttprequest_img-expected.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/w3c-import.log >index 5c92457d6c2c9e4e7dfeffa26774002a91245e0e..56bff5ee2af081626eab09546d8862f269755dd5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/w3c-import.log >@@ -20,3 +20,4 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/idlharness.html > /LayoutTests/imported/w3c/web-platform-tests/FileAPI/idlharness.worker.js >+/LayoutTests/imported/w3c/web-platform-tests/FileAPI/unicode.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9d20c69a33a54eb0f1bb1679e188ef7ee013bf57 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value-expected.txt >@@ -0,0 +1,4 @@ >+CONSOLE MESSAGE: line 41: SyntaxError: No identifiers allowed directly after numeric literal >+ >+FAIL IndexedDB: BigInt keys and values SyntaxError: No identifiers allowed directly after numeric literal >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value.htm b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..589eeabe6c6e6798406759e2d40fd28be2645473 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value.htm >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>IndexedDB: BigInt keys and values</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="support.js"></script> >+ >+<script> >+// BigInt and BigInt objects are supported in serialization, per >+// https://github.com/whatwg/html/pull/3480 >+// This support allows them to be used as IndexedDB values. >+ >+function value_test(value, predicate, name) { >+ async_test(t => { >+ t.step(function() { >+ assert_true(predicate(value), >+ "Predicate should return true for the initial value."); >+ }); >+ >+ createdb(t).onupgradeneeded = t.step_func(e => { >+ e.target.result >+ .createObjectStore("store") >+ .add(value, 1); >+ >+ e.target.onsuccess = t.step_func(e => { >+ e.target.result >+ .transaction("store") >+ .objectStore("store") >+ .get(1) >+ .onsuccess = t.step_func(e => >+ { >+ assert_true(predicate(e.target.result), >+ "Predicate should return true for the deserialized result."); >+ t.done(); >+ }); >+ }); >+ }); >+ }, "BigInts as values in IndexedDB - " + name); >+} >+ >+value_test(1n, >+ x => x === 1n, >+ "primitive BigInt"); >+value_test(Object(1n), >+ x => typeof x === 'object' && >+ x instanceof BigInt && >+ x.valueOf() === 1n, >+ "BigInt object"); >+value_test({val: 1n}, >+ x => x.val === 1n, >+ "primitive BigInt inside object"); >+value_test({val: Object(1n)}, >+ x => x.val.valueOf() === 1n && >+ x.val instanceof BigInt && >+ x.val.valueOf() === 1n, >+ "BigInt object inside object"); >+ >+// However, BigInt is not supported as an IndexedDB key; support >+// has been proposed in the following PR, but that change has not >+// landed at the time this patch was written >+// https://github.com/w3c/IndexedDB/pull/231 >+ >+function invalidKey(key, name) { >+ test(t => { >+ assert_throws("DataError", () => indexedDB.cmp(0, key)); >+ }, "BigInts as keys in IndexedDB - " + name); >+} >+ >+invalidKey(1n, "primitive BigInt"); >+// Still an error even if the IndexedDB patch lands >+invalidKey(Object(1n), "BigInt object"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical-expected.txt >index 43d081ed8c948c938bbf886c9a4b20352ecefe90..0a3435defc70d9f83c679d25ae372350792b4271 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical-expected.txt >@@ -11,4 +11,7 @@ PASS "PREV_NO_DUPLICATE" should not be supported on IDBCursor. > PASS "READ_ONLY" should not be supported on IDBTransaction. > PASS "READ_WRITE" should not be supported on IDBTransaction. > PASS "VERSION_CHANGE" should not be supported on IDBTransaction. >+PASS "IDBFileHandle" should not be supported >+PASS "IDBFileRequest" should not be supported >+PASS "IDBMutableFile" should not be supported > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical.html b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical.html >index 73d78c816763f2d8ca5ce6c4bc0578963a497537..8e7097eb46fd2e2c1c339e44ef1805b2f8b0fcf7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/historical.html >@@ -63,4 +63,18 @@ test(function() { > // Replaced circa May 2012 by a DOMString (later, IDBTransactionMode enum). > assert_false('VERSION_CHANGE' in IDBTransaction); > }, '"VERSION_CHANGE" should not be supported on IDBTransaction.'); >+ >+// Gecko-proprietary interfaces. >+var removedFromWindow = [ >+ 'IDBFileHandle', >+ 'IDBFileRequest', >+ 'IDBMutableFile', >+]; >+ >+removedFromWindow.forEach(function(name) { >+ test(function() { >+ assert_false(name in window); >+ }, '"' + name + '" should not be supported'); >+}); >+ > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7e8379d16df0e00677ab9e1d4d4778bf863ec872 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update-expected.txt >@@ -0,0 +1,8 @@ >+CONSOLE MESSAGE: line 2659: Error: assert_equals: Cursor should iterate over 4 records expected 4 but got 2 >+CONSOLE MESSAGE: line 2659: Error: assert_equals: Cursor should iterate over 4 records expected 4 but got 2 >+ >+Harness Error (FAIL), message = Error: assert_equals: Cursor should iterate over 4 records expected 4 but got 2 >+ >+TIMEOUT Calling cursor => cursor.update({}) doesn't affect index iteration Test timed out >+TIMEOUT Calling cursor => cursor.delete() doesn't affect index iteration Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..d2a7b9f01e61afed41f11956482cfc631cd5421a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm >@@ -0,0 +1,58 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>IndexedDB: Index iteration with cursor updates/deletes</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="support.js"></script> >+<script> >+const objStoreValues = [ >+ {name: 'foo', id: 1}, >+ {name: 'bar', id: 2}, >+ {name: 'foo', id: 3}, >+ {name: 'bar', id: 4}, >+]; >+ >+const objStoreValuesByIndex = [ >+ objStoreValues[1], >+ objStoreValues[3], >+ objStoreValues[0], >+ objStoreValues[2], >+]; >+ >+const functionsThatShouldNotAffectIteration = [ >+ cursor => cursor.update({}), >+ cursor => cursor.delete(), >+]; >+ >+functionsThatShouldNotAffectIteration.forEach((func) => indexeddb_test( >+ (t, db) => { >+ const objStore = db.createObjectStore('items', {autoIncrement: true}); >+ objStore.createIndex('name', 'name', {unique: false}); >+ objStoreValues.forEach((value) => objStore.add(value)); >+ }, >+ (t, db) => { >+ const txn = db.transaction('items', 'readwrite'); >+ const objStore = txn.objectStore('items'); >+ const nameIndex = objStore.index('name'); >+ >+ const cursorValues = []; >+ nameIndex.openCursor().onsuccess = (evt) => { >+ const cursor = evt.target.result; >+ if (cursor) { >+ func(cursor); >+ cursorValues.push(cursor.value); >+ cursor.continue(); >+ } else { >+ assert_equals(cursorValues.length, 4, >+ `Cursor should iterate over 4 records`); >+ >+ cursorValues.forEach((value, i) => { >+ assert_object_equals(value, objStoreValuesByIndex[i]); >+ }); >+ t.done(); >+ } >+ } >+ }, >+ `Calling ${func} doesn't affect index iteration` >+)); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-common.js b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-common.js >new file mode 100644 >index 0000000000000000000000000000000000000000..a76ec528c99c72767a7889df1d7d7df582485ce2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-common.js >@@ -0,0 +1,188 @@ >+// Infrastructure shared by interleaved-cursors-{small,large}.html >+ >+// Number of objects that each iterator goes over. >+const itemCount = 10; >+ >+// Ratio of small objects to large objects. >+const largeObjectRatio = 5; >+ >+// Size of large objects. This should exceed the size of a block in the storage >+// method underlying the browser's IndexedDB implementation. For example, this >+// needs to exceed the LevelDB block size on Chrome, and the SQLite block size >+// on Firefox. >+const largeObjectSize = 48 * 1024; >+ >+function objectKey(cursorIndex, itemIndex) { >+ return `${cursorIndex}-key-${itemIndex}`; >+} >+ >+function objectValue(cursorIndex, itemIndex) { >+ if ((cursorIndex * itemCount + itemIndex) % largeObjectRatio === 0) { >+ // We use a typed array (as opposed to a string) because IndexedDB >+ // implementations may serialize strings using UTF-8 or UTF-16, yielding >+ // larger IndexedDB entries than we'd expect. It's very unlikely that an >+ // IndexedDB implementation would use anything other than the raw buffer to >+ // serialize a typed array. >+ const buffer = new Uint8Array(largeObjectSize); >+ >+ // Some IndexedDB implementations, like LevelDB, compress their data blocks >+ // before storing them to disk. We use a simple 32-bit xorshift PRNG, which >+ // should be sufficient to foil any fast generic-purpose compression scheme. >+ >+ // 32-bit xorshift - the seed can't be zero >+ let state = 1000 + (cursorIndex * itemCount + itemIndex); >+ >+ for (let i = 0; i < largeObjectSize; ++i) { >+ state ^= state << 13; >+ state ^= state >> 17; >+ state ^= state << 5; >+ buffer[i] = state & 0xff; >+ } >+ >+ return buffer; >+ } >+ return [cursorIndex, 'small', itemIndex]; >+} >+ >+// Writes the objects to be read by one cursor. Returns a promise that resolves >+// when the write completes. >+// >+// We want to avoid creating a large transaction, because that is outside the >+// test's scope, and it's a bad practice. So we break up the writes across >+// multiple transactions. For simplicity, each transaction writes all the >+// objects that will be read by a cursor. >+function writeCursorObjects(database, cursorIndex) { >+ return new Promise((resolve, reject) => { >+ const transaction = database.transaction('cache', 'readwrite'); >+ transaction.onabort = () => { reject(transaction.error); }; >+ >+ const store = transaction.objectStore('cache'); >+ for (let i = 0; i < itemCount; ++i) { >+ store.put({ >+ key: objectKey(cursorIndex, i), value: objectValue(cursorIndex, i)}); >+ } >+ transaction.oncomplete = resolve; >+ }); >+} >+ >+// Returns a promise that resolves when the store has been populated. >+function populateTestStore(testCase, database, cursorCount) { >+ let promiseChain = Promise.resolve(); >+ >+ for (let i = 0; i < cursorCount; ++i) >+ promiseChain = promiseChain.then(() => writeCursorObjects(database, i)); >+ >+ return promiseChain; >+} >+ >+// Reads cursors in an interleaved fashion, as shown below. >+// >+// Given N cursors, each of which points to the beginning of a K-item sequence, >+// the following accesses will be made. >+// >+// OC(i) = open cursor i >+// RD(i, j) = read result of cursor i, which should be at item j >+// CC(i) = continue cursor i >+// | = wait for onsuccess on the previous OC or CC >+// >+// OC(1) | RD(1, 1) OC(2) | RD(2, 1) OC(3) | ... | RD(n-1, 1) CC(n) | >+// RD(n, 1) CC(1) | RD(1, 2) CC(2) | RD(2, 2) CC(3) | ... | RD(n-1, 2) CC(n) | >+// RD(n, 2) CC(1) | RD(1, 3) CC(2) | RD(2, 3) CC(3) | ... | RD(n-1, 3) CC(n) | >+// ... >+// RD(n, k-1) CC(1) | RD(1, k) CC(2) | RD(2, k) CC(3) | ... | RD(n-1, k) CC(n) | >+// RD(n, k) done >+function interleaveCursors(testCase, store, cursorCount) { >+ return new Promise((resolve, reject) => { >+ // The cursors used for iteration are stored here so each cursor's onsuccess >+ // handler can call continue() on the next cursor. >+ const cursors = []; >+ >+ // The results of IDBObjectStore.openCursor() calls are stored here so we >+ // we can change the requests' onsuccess handler after every >+ // IDBCursor.continue() call. >+ const requests = []; >+ >+ const checkCursorState = (cursorIndex, itemIndex) => { >+ const cursor = cursors[cursorIndex]; >+ assert_equals(cursor.key, objectKey(cursorIndex, itemIndex)); >+ assert_equals(cursor.value.key, objectKey(cursorIndex, itemIndex)); >+ assert_equals( >+ cursor.value.value.join('-'), >+ objectValue(cursorIndex, itemIndex).join('-')); >+ }; >+ >+ const openCursor = (cursorIndex, callback) => { >+ const request = store.openCursor( >+ IDBKeyRange.lowerBound(objectKey(cursorIndex, 0))); >+ requests[cursorIndex] = request; >+ >+ request.onsuccess = testCase.step_func(() => { >+ const cursor = request.result; >+ cursors[cursorIndex] = cursor; >+ checkCursorState(cursorIndex, 0); >+ callback(); >+ }); >+ request.onerror = event => reject(request.error); >+ }; >+ >+ const readItemFromCursor = (cursorIndex, itemIndex, callback) => { >+ const request = requests[cursorIndex]; >+ request.onsuccess = testCase.step_func(() => { >+ const cursor = request.result; >+ cursors[cursorIndex] = cursor; >+ checkCursorState(cursorIndex, itemIndex); >+ callback(); >+ }); >+ >+ const cursor = cursors[cursorIndex]; >+ cursor.continue(); >+ }; >+ >+ // We open all the cursors one at a time, then cycle through the cursors and >+ // call continue() on each of them. This access pattern causes maximal >+ // trashing to an LRU cursor cache. Eviction scheme aside, any cache will >+ // have to evict some cursors, and this access pattern verifies that the >+ // cache correctly restores the state of evicted cursors. >+ const steps = []; >+ for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) >+ steps.push(openCursor.bind(null, cursorIndex)); >+ for (let itemIndex = 1; itemIndex < itemCount; ++itemIndex) { >+ for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) >+ steps.push(readItemFromCursor.bind(null, cursorIndex, itemIndex)); >+ } >+ >+ const runStep = (stepIndex) => { >+ if (stepIndex === steps.length) { >+ resolve(); >+ return; >+ } >+ steps[stepIndex](() => { runStep(stepIndex + 1); }); >+ }; >+ runStep(0); >+ }); >+} >+ >+function cursorTest(cursorCount) { >+ promise_test(testCase => { >+ return createDatabase(testCase, (database, transaction) => { >+ const store = database.createObjectStore('cache', >+ { keyPath: 'key', autoIncrement: true }); >+ }).then(database => { >+ return populateTestStore(testCase, database, cursorCount).then( >+ () => database); >+ }).then(database => { >+ database.close(); >+ }).then(() => { >+ return openDatabase(testCase); >+ }).then(database => { >+ const transaction = database.transaction('cache', 'readonly'); >+ transaction.onabort = () => { reject(transaction.error); }; >+ >+ const store = transaction.objectStore('cache'); >+ return interleaveCursors(testCase, store, cursorCount).then( >+ () => database); >+ }).then(database => { >+ database.close(); >+ }); >+ }, `${cursorCount} cursors`); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..60e441b91d938071f75b2fc9b712803cb936e919 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS 250 cursors >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large.html b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6f4e440e1dac8c6389d0882b314a10ea84ad9af8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<meta name="timeout" content="long"> >+<title>IndexedDB: Interleaved iteration of multiple cursors</title> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="support-promises.js"></script> >+<script src="interleaved-cursors-common.js"></script> >+<script> >+cursorTest(250); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..67798bd5c9b97fede4abaf453c069f1dd0893c47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS 1 cursors >+PASS 10 cursors >+PASS 100 cursors >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small.html b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a4c47771782f61c8ef17398e66d57e8d03db5830 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small.html >@@ -0,0 +1,14 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<meta name="timeout" content="long"> >+<title>IndexedDB: Interleaved iteration of multiple cursors</title> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="support-promises.js"></script> >+<script src="interleaved-cursors-common.js"></script> >+<script> >+cursorTest(1); >+cursorTest(10); >+cursorTest(100); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers-expected.txt >index be90589cf5c90b96658d6ec845a04ea42c10b449..0ef8ecac4a230f58eebbdeb3bc2e20e5238ebe4c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers-expected.txt >@@ -4,6 +4,5 @@ PASS Type: Array, identifier: length > PASS Type: Blob, identifier: size > PASS Type: Blob, identifier: type > PASS Type: File, identifier: name >-PASS Type: File, identifier: lastModified >-FAIL Type: File, identifier: lastModifiedDate Provided data is inadequate. >+FAIL Type: File, identifier: lastModified assert_equals: Property should be used as key expected 0 but got 1 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm >index 331169b5c9033d466b93b4a6f6517822ac213bd8..cb64d0b708eb3f97d99b0b754fcdf9bd12394821 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm >@@ -38,11 +38,6 @@ > property: 'lastModified', > instance: new File([''], '', {lastModified: 123}), > }, >- { >- type: 'File', >- property: 'lastModifiedDate', >- instance: new File([''], '', {lastModified: 123}), >- }, > ].forEach(function(testcase) { > indexeddb_test( > (t, db) => { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.htm b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.htm >index b59d614e8a9b47f300c4924e96284a38ed9b4f20..4985712a215c28b6a798e789a7a384a4719760b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.htm >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keypath.htm >@@ -125,7 +125,7 @@ > "[Blob.length, Blob.type]"); > } > >- // File.name and File.lastModifiedDate is not testable automatically >+ // File.name and File.lastModified is not testable automatically > > keypath(['name', 'type'], > [ { name: "orange", type: "fruit" }, { name: "orange", type: ["telecom", "french"] } ], >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/w3c-import.log >index 836fd054392034e415707d2742e91d8e279585a2..836ba1d14939730138d3768c284a3a7470213148 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/w3c-import.log >@@ -17,6 +17,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/README.md > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/abort-in-initial-upgradeneeded.html >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bigint_value.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/bindings-inject-key.html > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/clone-before-keypath-eval.html > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/close-in-upgradeneeded.html >@@ -48,6 +49,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-direction-objectstore-keyrange.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-direction-objectstore.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-direction.htm >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-iterating-update.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-key.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-primarykey.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbcursor-request-source.html >@@ -316,6 +318,9 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbworker.js > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/index_sort_order.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interfaces.any.js >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-common.js >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-large.html >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/interleaved-cursors-small.html > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/key-conversion-exceptions.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/key_invalid.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/key_valid.html >@@ -364,4 +369,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/upgrade-transaction-lifecycle-user-aborted.html > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value.htm > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/value_recursive.htm >+/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value.html > /LayoutTests/imported/w3c/web-platform-tests/IndexedDB/writer-starvation.htm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3558542d3c787cdd7ad47e1851b43bf522f6476e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL WebAssembly module as an IndexedDB value Failed to store record in an IDBObjectStore: An object could not be cloned. >+FAIL WebAssembly module in a JavaScript object IndexedDB value Failed to store record in an IDBObjectStore: An object could not be cloned. >+FAIL WebAssembly module in an IndexedDB value with an inline key Failed to store record in an IDBObjectStore: An object could not be cloned. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value.html b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9fcfd780b8e59ff49e54406fbc4106e683c76025 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/wasm-module-value.html >@@ -0,0 +1,109 @@ >+<!doctype html> >+<meta charset="utf8"> >+<meta name="timeout" content="long"> >+<title>IndexedDB: WebAssembly module values</title> >+<link rel="help" href="https://w3c.github.io/IndexedDB/"> >+<link rel="help" href="https://webassembly.github.io/spec/"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="support-promises.js"></script> >+<script> >+'use strict'; >+ >+// Binary representation for a WASM module that exports an "inc" function. >+// >+// This test covers storing WASM modules in IndexedDB. Its failure should only >+// be debugged if WASM specification tests pass. To this end, the test does not >+// use the WASM module builder helpers, trading off WASM debuggability in return >+// for having the WASM wire bytes listed explicitly in the test body. Having the >+// wire bytes spelled out can be helpful when debugging IndexedDB failures. >+let wasm_module_bytes = new Uint8Array([ >+ 0x00, 0x61, 0x73, 0x6d, // Magic. >+ 0x01, 0x00, 0x00, 0x00, // Version. >+ 0x01, 0x06, 0x01, // Type section - 6 bytes, 1 entry >+ 0x60, 0x01, 0x7f, 0x01, 0x7f, // Type 0. Function: (i32) -> (i32) >+ 0x03, 0x02, 0x01, // Function section - 2 bytes, 1 entry >+ 0x00, // Function 0: Type 0 >+ 0x07, 0x07, 0x01, // Export section - 7 bytes, 1 entry >+ 0x03, 0x69, 0x6e, 0x63, // Export 1. { name: "inc" >+ 0x00, 0x00, // desc: function 0 } >+ 0x0a, 0x09, 0x01, // Code section: 9 bytes, 1 entry >+ 0x07, 0x00, // Function 1: 7 code bytes, 0 locals >+ 0x20, 0x00, // getlocal 0 >+ 0x41, 0x01, // i32.const 1 >+ 0x6a, // i32.add >+ 0x0b, // end >+]); >+ >+promise_test(async testCase => { >+ const wasm_module = await WebAssembly.compile(wasm_module_bytes.buffer); >+ >+ const database = await createDatabase(testCase, (database, transaction) => { >+ const store = database.createObjectStore('store'); >+ store.put(wasm_module, 'key1'); >+ }); >+ >+ const result = await new Promise((resolve, reject) => { >+ const transaction = database.transaction(['store'], 'readonly'); >+ const store = transaction.objectStore('store'); >+ const request = store.get('key1'); >+ request.onsuccess = (event) => resolve(event.target.result); >+ request.onerror = (event) => reject(event.target.error); >+ }); >+ >+ database.close(); >+ >+ const instance = await WebAssembly.instantiate(result); >+ assert_equals( >+ instance.exports['inc'](42), 43, 'inc should increment its argument'); >+}, 'WebAssembly module as an IndexedDB value'); >+ >+promise_test(async testCase => { >+ const wasm_module = await WebAssembly.compile(wasm_module_bytes.buffer); >+ >+ const database = await createDatabase(testCase, (database, transaction) => { >+ const store = database.createObjectStore('store'); >+ store.put({ module: wasm_module }, 'key1'); >+ }); >+ >+ const result = await new Promise((resolve, reject) => { >+ const transaction = database.transaction(['store'], 'readonly'); >+ const store = transaction.objectStore('store'); >+ const request = store.get('key1'); >+ request.onsuccess = (event) => resolve(event.target.result); >+ request.onerror = (event) => reject(event.target.error); >+ }); >+ >+ database.close(); >+ >+ const instance = await WebAssembly.instantiate(result.module); >+ assert_equals( >+ instance.exports['inc'](42), 43, 'inc should increment its argument'); >+}, 'WebAssembly module in a JavaScript object IndexedDB value'); >+ >+promise_test(async testCase => { >+ const wasm_module = await WebAssembly.compile(wasm_module_bytes.buffer); >+ >+ const database = await createDatabase(testCase, (database, transaction) => { >+ const store = database.createObjectStore('store', { keyPath: 'key' }); >+ store.put({ key: 'key1', module: wasm_module }); >+ }); >+ >+ const result = await new Promise((resolve, reject) => { >+ const transaction = database.transaction(['store'], 'readonly'); >+ const store = transaction.objectStore('store'); >+ const request = store.get('key1'); >+ request.onsuccess = (event) => resolve(event.target.result); >+ request.onerror = (event) => reject(event.target.error); >+ }); >+ >+ database.close(); >+ >+ assert_equals('key1', result.key); >+ const instance = await WebAssembly.instantiate(result.module); >+ assert_equals( >+ instance.exports['inc'](42), 43, 'inc should increment its argument'); >+}, 'WebAssembly module in an IndexedDB value with an inline key'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/README.md b/LayoutTests/imported/w3c/web-platform-tests/README.md >index 1f713ba207543045e19d994b46cdd766ae3c98a4..84cd627eafdc43b1b236bc75bc342f345a90bad7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/README.md >+++ b/LayoutTests/imported/w3c/web-platform-tests/README.md >@@ -15,7 +15,11 @@ editors and implementors. > Setting Up the Repo > =================== > >-Clone or otherwise get https://github.com/w3c/web-platform-tests. >+Clone or otherwise get https://github.com/web-platform-tests/wpt. >+ >+Note: because of the frequent creation and deletion of branches in this >+repo, it is recommended to "prune" stale branches when fetching updates, >+i.e. use `git pull --prune` (or `git fetch -p && git merge`). > > Running the Tests > ================= >@@ -28,17 +32,22 @@ your `%Path%` [Environment Variable](http://www.computerhope.com/issues/ch000549 > and read the [Windows Notes](#windows-notes) section below. > > To get the tests running, you need to set up the test domains in your >-[`hosts` file](http://en.wikipedia.org/wiki/Hosts_%28file%29%23Location_in_the_file_system). The >-following entries are required: >+[`hosts` file](http://en.wikipedia.org/wiki/Hosts_%28file%29%23Location_in_the_file_system). >+ >+The necessary content can be generated with `./wpt make-hosts-file`; on >+Windows, you will need to precede the prior command with `python` or >+the path to the Python binary (`python wpt make-hosts-file`). > >+For example, on most UNIX-like systems, you can setup the hosts file with: >+ >+```bash >+./wpt make-hosts-file | sudo tee -a /etc/hosts > ``` >-127.0.0.1 web-platform.test >-127.0.0.1 www.web-platform.test >-127.0.0.1 www1.web-platform.test >-127.0.0.1 www2.web-platform.test >-127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test >-127.0.0.1 xn--lve-6lad.web-platform.test >-0.0.0.0 nonexistent-origin.web-platform.test >+ >+And on Windows (this must be run in a PowerShell session with Administrator privileges): >+ >+```bash >+python wpt make-hosts-file | Out-File %SystemRoot%\System32\drivers\etc\hosts -Encoding ascii -Append > ``` > > If you are behind a proxy, you also need to make sure the domains above are >@@ -49,25 +58,38 @@ Running Tests Manually > ====================== > > The test server can be started using >+``` >+./wpt serve >+``` > >- ./wpt serve >+**On Windows**: You will need to precede the prior command with >+`python` or the path to the python binary. >+```bash >+python wpt serve >+``` > > This will start HTTP servers on two ports and a websockets server on >-one port. By default one web server starts on port 8000 and the other >-ports are randomly-chosen free ports. Tests must be loaded from the >-*first* HTTP server in the output. To change the ports, copy the >-`config.default.json` file to `config.json` and edit the new file, >-replacing the part that reads: >+one port. By default the web servers start on ports 8000 and 8443 and >+the other ports are randomly-chosen free ports. Tests must be loaded >+from the *first* HTTP server in the output. To change the ports, >+create a `config.json` file in the wpt root directory, and add >+port definitions of your choice e.g.: > > ``` >-"http": [8000, "auto"] >+{ >+ "ports": { >+ "http": [1234, "auto"], >+ "https":[5678] >+ } >+} > ``` > >-to some port of your choice e.g. >+After your `hosts` file is configured, the servers will be locally accessible at: > >-``` >-"http": [1234, "auto"] >-``` >+http://web-platform.test:8000/<br> >+https://web-platform.test:8443/ * >+ >+\**See [Trusting Root CA](#trusting-root-ca)* > > Running Tests Automatically > --------------------------- >@@ -78,17 +100,20 @@ file setup documented above, but you must *not* have the > test server already running when calling `wpt run`. The basic command > line syntax is: > >-``` >+```bash > ./wpt run product [tests] > ``` > >-**On Windows**: You will need to preceed the prior command with >+**On Windows**: You will need to precede the prior command with > `python` or the path to the python binary. >+```bash >+python wpt run product [tests] >+``` > > where `product` is currently `firefox` or `chrome` and `[tests]` is a > list of paths to tests. This will attempt to automatically locate a > browser instance and install required dependencies. The command is >-very configurable; for examaple to specify a particular binary use >+very configurable; for example to specify a particular binary use > `wpt run --binary=path product`. The full range of options can be see > with `wpt run --help` and `wpt run --wptrunner-help`. > >@@ -108,6 +133,15 @@ And on macOS with homebrew using: > brew install nss > ``` > >+On other platforms, download the firefox archive and common.tests.zip >+archive for your platform from >+[Mozilla CI](https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central/). >+ >+Then extract `certutil[.exe]` from the tests.zip package and >+`libnss3[.so|.dll|.dynlib]` and put the former on your path and the latter on >+your library path. >+ >+ > Command Line Tools > ================== > >@@ -135,7 +169,7 @@ git submodule update --init --recursive > ``` > > Prior to commit `39d07eb01fab607ab1ffd092051cded1bdd64d78` submodules >-were requried for basic functionality. If you are working with an >+were required for basic functionality. If you are working with an > older checkout, the above command is required in all cases. > > When moving between a commit prior to `39d07eb` and one after it git >@@ -147,7 +181,7 @@ error: The following untracked working tree files would be overwritten by checko > [â¦] > ``` > >-followed by a long list of files. To avoid this error remove >+...followed by a long list of files. To avoid this error, remove > the `resources` and `tools` directories before switching branches: > > ``` >@@ -169,14 +203,18 @@ Failed to recurse into submodule path 'resources' > Failed to recurse into submodule path 'tools' > ``` > >-then remove the `tools` and `resources` directories, as above. >+...then remove the `tools` and `resources` directories, as above. > > <span id="windows-notes">Windows Notes</span> > ============================================= > >-On Windows `wpt` commands mut bre prefixed with `python` or the path >+On Windows `wpt` commands must be prefixed with `python` or the path > to the python binary (if `python` is not in your `%PATH%`). > >+```bash >+python wpt [command] >+``` >+ > Alternatively, you may also use > [Bash on Ubuntu on Windows](https://msdn.microsoft.com/en-us/commandline/wsl/about) > in the Windows 10 Anniversary Update build, then access your windows >@@ -189,8 +227,8 @@ line endings, as it will cause lint errors. For git, please set > Certificates > ============ > >-By default pregenerated certificates for the web-platform.test domain >-are provided in the repository. If you wish to generate new >+By default pre-generated certificates for the web-platform.test domain >+are provided in [`tools/certs`](tools/certs). If you wish to generate new > certificates for any reason it's possible to use OpenSSL when starting > the server, or starting a test run, by providing the > `--ssl-type=openssl` argument to the `wpt serve` or `wpt run` >@@ -221,12 +259,40 @@ If you forget to do this part, you will most likely see a 'File Not Found' > error when you start wptserve. > > Finally, set the path value in the server configuration file to the >-default OpenSSL configuration file location. To do this, >-copy `config.default.json` in the web-platform-tests root to `config.json`. >-Then edit the JSON so that the key `ssl/openssl/base_conf_path` has a >-value that is the path to the OpenSSL config file (typically this >-will be `C:\\OpenSSL-Win32\\bin\\openssl.cfg`). >+default OpenSSL configuration file location. To do this create a file >+called `config.json`. Then add the OpenSSL configuration below, >+ensuring that the key `ssl/openssl/base_conf_path` has a value that is >+the path to the OpenSSL config file (typically this will be >+`C:\\OpenSSL-Win32\\bin\\openssl.cfg`): > >+``` >+{ >+ "ssl": { >+ "type": "openssl", >+ "encrypt_after_connect": false, >+ "openssl": { >+ "openssl_binary": "openssl", >+ "base_path: "_certs", >+ "force_regenerate": false, >+ "base_conf_path": "C:\\OpenSSL-Win32\\bin\\openssl.cfg" >+ }, >+ }, >+} >+``` >+ >+### Trusting Root CA >+ >+To prevent browser SSL warnings when running HTTPS tests locally, the >+web-platform-tests Root CA file `cacert.pem` in [tools/certs](tools/certs) >+must be added as a trusted certificate in your OS/browser. >+ >+**NOTE**: The CA should not be installed in any browser profile used >+outside of tests, since it may be used to generate fake >+certificates. For browsers that use the OS certificate store, tests >+should therefore not be run manually outside a dedicated OS instance >+(e.g. a VM). To avoid this problem when running tests in Chrome or >+Firefox use `wpt run`, which disables certificate checks and therefore >+doesn't require the root CA to be trusted. > > Publication > =========== >@@ -290,7 +356,7 @@ Issues with web-platform-tests > > If you spot an issue with a test and are not comfortable providing a > pull request per above to fix it, please >-[file a new issue](https://github.com/w3c/web-platform-tests/issues/new). >+[file a new issue](https://github.com/web-platform-tests/wpt/issues/new). > Thank you! > > Lint tool >@@ -315,7 +381,7 @@ web-platform-tests root directory to suppress the error reports. > > For more details, see the [lint-tool documentation][lint-tool]. > >-[lint-tool]: http://web-platform-tests.org/writing-tests/lint-tool.html >+[lint-tool]: https://web-platform-tests.org/writing-tests/lint-tool.html > > Adding command-line scripts ("tools" subdirs) > --------------------------------------------- >@@ -364,6 +430,14 @@ been adequately reviewed "upstream" in another repository, it can be > pushed here without any further review by supplying a link to the > upstream review. > >+Search filters to find things to review: >+ >+* [Open PRs (excluding vendor exports)](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+-label%3A%22mozilla%3Agecko-sync%22+-label%3A%22chromium-export%22+-label%3A%22webkit-export%22+-label%3A%22servo-export%22) >+* [Reviewed but still open PRs (excluding vendor exports)](https://github.com/web-platform-tests/wpt/pulls?q=is%3Apr+is%3Aopen+-label%3Amozilla%3Agecko-sync+-label%3Achromium-export+-label%3Awebkit-export+-label%3Aservo-export+review%3Aapproved) (Merge? Something left to fix? Ping other reviewer?) >+* [Open PRs without owners](https://github.com/web-platform-tests/wpt/pulls?q=is%3Apr+is%3Aopen+label%3Astatus%3Aneeds-owners) >+* [Open PRs with label `infra` (excluding vendor exports)](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+label%3Ainfra+-label%3A%22mozilla%3Agecko-sync%22+-label%3A%22chromium-export%22+-label%3A%22webkit-export%22+-label%3A%22servo-export%22) >+* [Open PRs with label `docs` (excluding vendor exports)](https://github.com/web-platform-tests/wpt/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+label%3Adocs+-label%3A%22mozilla%3Agecko-sync%22+-label%3A%22chromium-export%22+-label%3A%22webkit-export%22+-label%3A%22servo-export%22) >+ > Getting Involved > ================ > >@@ -375,13 +449,13 @@ The mailing list is [archived][mailarchive]. > Join us on irc #testing ([irc.w3.org][ircw3org], port 6665). The channel > is [archived][ircarchive]. > >-[contributing]: https://github.com/w3c/web-platform-tests/blob/master/CONTRIBUTING.md >+[contributing]: https://github.com/web-platform-tests/wpt/blob/master/CONTRIBUTING.md > [ircw3org]: https://www.w3.org/wiki/IRC >-[ircarchive]: http://logs.glob.uno/?c=w3%23testing >+[ircarchive]: https://w3.logbot.info/testing > [mailarchive]: https://lists.w3.org/Archives/Public/public-test-infra/ > > Documentation > ============= > >-* [How to write and review tests](http://web-platform-tests.org/) >+* [How to write and review tests](https://web-platform-tests.org/) > * [Documentation for the wptserve server](http://wptserve.readthedocs.org/en/latest/) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6ba2c901e27d4f0a39139ef702b94ad21d9a623b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-CBC}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CBC}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CBC}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..19c9fb28b3bc073a9e18e8abed0838f29bd0ce69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["AES-CBC"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6ba2c901e27d4f0a39139ef702b94ad21d9a623b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-CBC}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CBC}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CBC}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CBC}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt >index 6ba2c901e27d4f0a39139ef702b94ad21d9a623b..370fca34a9c44b86319fee7c265207365c02b29c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker-expected.txt >@@ -1,740 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 640: "tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js >deleted file mode 100644 >index 7bb3e7f697fd80e9333337ecdbe6285f7776d353..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["AES-CBC"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9b38fb3329c5a71c0f4aef6f90ce9d0aa142ff03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-CTR}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CTR}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CTR}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2f8a0b3596f192dd9382a4229634fbd357b7a6ec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["AES-CTR"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9b38fb3329c5a71c0f4aef6f90ce9d0aa142ff03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-CTR}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-CTR}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CTR}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-CTR}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt >index 9b38fb3329c5a71c0f4aef6f90ce9d0aa142ff03..828fadd7028f2c27b60271d42cc5d0cde561ecfc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker-expected.txt >@@ -1,740 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 640: "tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js >deleted file mode 100644 >index f6766b27bba3d790d049a0e583362212febdc4af..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["AES-CTR"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f23c217e60dff1c76b83bc260c0673f970339474 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-GCM}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-GCM}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-GCM}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bb0ab46fbe6c99547446463df71132425266a3e1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["AES-GCM"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f23c217e60dff1c76b83bc260c0673f970339474 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker-expected.txt >@@ -0,0 +1,740 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-GCM}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-GCM}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-GCM}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-GCM}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt >index f23c217e60dff1c76b83bc260c0673f970339474..e08fca5e9d9860c1e73cfa66b7832cf179fc21a6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker-expected.txt >@@ -1,740 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 640: "tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js >deleted file mode 100644 >index 1383e5895595cf9972d1a169edcabbf580136e1b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["AES-GCM"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..180a9bcd490e499fc5145fa5059f543f91c42903 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any-expected.txt >@@ -0,0 +1,482 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-KW}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-KW}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-KW}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..54d685f7565735f698a0d2886e7c5a3c255ea913 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["AES-KW"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..180a9bcd490e499fc5145fa5059f543f91c42903 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker-expected.txt >@@ -0,0 +1,482 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, []) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({length: 128, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 128, name: AES-KW}, true, []) >+PASS Empty usages: generateKey({length: 192, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 192, name: AES-KW}, true, []) >+PASS Empty usages: generateKey({length: 256, name: AES-KW}, false, []) >+PASS Empty usages: generateKey({length: 256, name: AES-KW}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt >index 180a9bcd490e499fc5145fa5059f543f91c42903..7d526922866260626e9664561bc92da7287703ae 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker-expected.txt >@@ -1,482 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 632: "tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js >deleted file mode 100644 >index 04f5bb6edab65d9b22281cf2e0bb8310cb16e9f2..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["AES-KW"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e797642e03c42a0edf449c736ab6db07a007b1c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any-expected.txt >@@ -0,0 +1,442 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) >+FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4c13c5ac5721f7fe1a35152308de7eb6b9e41a97 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["ECDH"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e797642e03c42a0edf449c736ab6db07a007b1c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker-expected.txt >@@ -0,0 +1,442 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) >+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) >+FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt >index e797642e03c42a0edf449c736ab6db07a007b1c5..c8366caedd8d723ac9ce7cdd55833d751c12e587 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker-expected.txt >@@ -1,442 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) >-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 617: "tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js >deleted file mode 100644 >index a7e6a7240bcc4ab3d70d9513bcb7c9267c81307b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["ECDH"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e2532ee71c2782488784aad5f6a2445bc21cb2fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any-expected.txt >@@ -0,0 +1,420 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) >+FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..74cd480e2c2de0eab571174726d282e0ba9fba17 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["ECDSA"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e2532ee71c2782488784aad5f6a2445bc21cb2fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker-expected.txt >@@ -0,0 +1,420 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) >+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) >+FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt >index e2532ee71c2782488784aad5f6a2445bc21cb2fc..7ed963eeb821666f135e287ceee15fcf489f98e9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker-expected.txt >@@ -1,420 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 625: "tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js >deleted file mode 100644 >index a1f471141de052643c42609f089876498d1c624f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["ECDSA"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a26c48a091a352061004ab35bb58b75250b788df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any-expected.txt >@@ -0,0 +1,454 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..708d33beba4925a9ee2c402d5a0b80eb0dc36126 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["HMAC"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a26c48a091a352061004ab35bb58b75250b788df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker-expected.txt >@@ -0,0 +1,454 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >+PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, []) >+PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, []) >+PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt >index a26c48a091a352061004ab35bb58b75250b788df..907e3a04a4b53e46849caa79de21e0526cd0b522 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker-expected.txt >@@ -1,454 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 617: "tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js >deleted file mode 100644 >index 9dfbbb9c065a7352c667fc7a1d671dfe922a2f91..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["HMAC"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d8342f45b1d63a2ac3f5e0278d9434ed0209be24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any-expected.txt >@@ -0,0 +1,498 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4ec0ec20bac1cef5a61ae8ec3e735e689bda5af1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["RSA-OAEP"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d8342f45b1d63a2ac3f5e0278d9434ed0209be24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker-expected.txt >@@ -0,0 +1,498 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, encrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt >index d8342f45b1d63a2ac3f5e0278d9434ed0209be24..bfbf98f2c1ea11a08c480992d54e5a0314abfb59 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker-expected.txt >@@ -1,498 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 648: "tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js >deleted file mode 100644 >index 39de6d6efecf7d28f9113cd44ea03749f65daf11..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["RSA-OAEP"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..037f0956f5d4536ef735ff168015d219d3020a50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any-expected.txt >@@ -0,0 +1,394 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..557b5785e348ee41057d61d89ea088e35aa1279b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["RSA-PSS"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..037f0956f5d4536ef735ff168015d219d3020a50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker-expected.txt >@@ -0,0 +1,394 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js >deleted file mode 100644 >index 8b1110d7f096b08585126a2a96f8a8bb2e5f44fd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["RSA-PSS"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..be08f1153e8896f2f18ca12fa7bb2415dce8f135 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any-expected.txt >@@ -0,0 +1,394 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..45771bf0d46eadf6cb8a852ee77538f5f8891aa8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js >@@ -0,0 +1,4 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=failures.js >+run_test(["RSASSA-PKCS1-v1_5"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..be08f1153e8896f2f18ca12fa7bb2415dce8f135 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt >@@ -0,0 +1,394 @@ >+ >+PASS Bad algorithm: generateKey(AES, false, [decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey(AES, false, [sign]) >+PASS Bad algorithm: generateKey(AES, true, [sign]) >+PASS Bad algorithm: generateKey(AES, RED, [sign]) >+PASS Bad algorithm: generateKey(AES, 7, [sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >+PASS Bad algorithm: generateKey(AES, false, []) >+PASS Bad algorithm: generateKey(AES, true, []) >+PASS Bad algorithm: generateKey(AES, RED, []) >+PASS Bad algorithm: generateKey(AES, 7, []) >+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, false, []) >+PASS Bad algorithm: generateKey({name: AES}, true, []) >+PASS Bad algorithm: generateKey({name: AES}, RED, []) >+PASS Bad algorithm: generateKey({name: AES}, 7, []) >+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >+PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >+PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt >index be08f1153e8896f2f18ca12fa7bb2415dce8f135..c98e87d624944e9cbf1294a03ef601b6e4148069 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker-expected.txt >@@ -1,394 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 718: "tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js >deleted file mode 100644 >index 4df0b896fe37c2a18d91b72b02d920aa959be880..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js >+++ /dev/null >@@ -1,6 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("failures.js"); >-run_test(["RSASSA-PKCS1-v1_5"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.js >index 6a74c01ddde4fd4a10fd8144d582e77fda76713f..b99e44d66d40f882fdcd217ddba8b41cba457ea6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.js >@@ -70,7 +70,6 @@ function run_test(algorithmNames, slowTest) { > }, testTag + ": generateKey" + parameterString(algorithm, extractable, usages)); > } > >- > // Test all valid sets of parameters for successful > // key generation. > testVectors.forEach(function(vector) { >@@ -78,7 +77,7 @@ function run_test(algorithmNames, slowTest) { > allAlgorithmSpecifiersFor(name).forEach(function(algorithm) { > allValidUsages(vector.usages, false, vector.mandatoryUsages).forEach(function(usages) { > [false, true].forEach(function(extractable) { >- testSuccess(algorithm, extractable, usages, vector.resultType, "Success"); >+ subsetTest(testSuccess, algorithm, extractable, usages, vector.resultType, "Success"); > }); > }); > }); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..377dd279c6acd615a54649178cbf3c0c5f9517bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..6feb60e5caa79590c3685bb247ed9ccbe01910b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["AES-CBC"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..377dd279c6acd615a54649178cbf3c0c5f9517bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt >index 377dd279c6acd615a54649178cbf3c0c5f9517bd..704cb477af7477b4c97e2b70b3b47f1d4b5f9ffe 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker-expected.txt >@@ -1,290 +1,17 @@ >- >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 648: "tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js >deleted file mode 100644 >index 0710c9e7b504533b3f7a089f83e3b4c28af116bd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["AES-CBC"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e4db9f863ec0a63d817302bd9da7e5732ab8b7d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7b4f2df5fb1b3cf923929ab349a4968db68bf35f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["AES-CTR"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e4db9f863ec0a63d817302bd9da7e5732ab8b7d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt >index e4db9f863ec0a63d817302bd9da7e5732ab8b7d3..738756361e215794264c5bfc07cdf65eac7c7d24 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker-expected.txt >@@ -1,290 +1,17 @@ >- >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 648: "tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js >deleted file mode 100644 >index 51529f000fd8e0070014c94a9f28593185e0c785..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["AES-CTR"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..074f16aa890d925ef69466b3130917dda798efeb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..8e7bc92170c65b2377da3665ac4d564d9fa9729b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["AES-GCM"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..074f16aa890d925ef69466b3130917dda798efeb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker-expected.txt >@@ -0,0 +1,290 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt >index 074f16aa890d925ef69466b3130917dda798efeb..48319c935d674c4669d4c1b773b11bf8e631d842 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker-expected.txt >@@ -1,290 +1,17 @@ >- >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 648: "tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js >deleted file mode 100644 >index 1f6a1bc96e0060efb8ec681fb0dcbb7942734162..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["AES-GCM"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..43842a1c474ffaf7aae0cc08e855a5876c29b77e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any-expected.txt >@@ -0,0 +1,74 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..5eb023369f402971dee5870a692fd21241d19525 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["AES-KW"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..43842a1c474ffaf7aae0cc08e855a5876c29b77e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker-expected.txt >@@ -0,0 +1,74 @@ >+ >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt >index 43842a1c474ffaf7aae0cc08e855a5876c29b77e..c3fc4235632d85981be1d801f16b37078060342c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker-expected.txt >@@ -1,74 +1,17 @@ >- >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 640: "tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js >deleted file mode 100644 >index 058cf83d0576200f3103cd1dd607886fd6ded8dd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["AES-KW"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ed7540195c4c2384b3345f9694987869e7568bc0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any-expected.txt >@@ -0,0 +1,74 @@ >+ >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..87590d23ea4340c7adfd298d3ff828f9f839ef71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["ECDH"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ed7540195c4c2384b3345f9694987869e7568bc0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker-expected.txt >@@ -0,0 +1,74 @@ >+ >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt >index ed7540195c4c2384b3345f9694987869e7568bc0..da7ddae498ab1006fb498a5893124192865c50d1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker-expected.txt >@@ -1,74 +1,17 @@ >- >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 625: "tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js >deleted file mode 100644 >index a21b7d04e8bcd5493c1bfc5e7eae9f6ed7ba6206..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["ECDH"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d48e032088ed10a3a088de6f96b9ddf985e56d80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any-expected.txt >@@ -0,0 +1,56 @@ >+ >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..734d86972fc6786598b186e95e291a200384f282 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["ECDSA"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d48e032088ed10a3a088de6f96b9ddf985e56d80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker-expected.txt >@@ -0,0 +1,56 @@ >+ >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt >index d48e032088ed10a3a088de6f96b9ddf985e56d80..9dd53f3fa7d0b4bdb21cfbdc78b598c2e16d9813 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker-expected.txt >@@ -1,56 +1,17 @@ >- >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 632: "tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js >deleted file mode 100644 >index 13f7e3539ec4745a5aefdb91bcff6c3491f026ef..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["ECDSA"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..76b75e6789694d6ab1e1984239fb81d116fcfdf9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any-expected.txt >@@ -0,0 +1,98 @@ >+ >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign, verify, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bc106f3c117c76247484b142c432f732bcafc848 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.js >@@ -0,0 +1,5 @@ >+// META: timeout=long >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["HMAC"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..76b75e6789694d6ab1e1984239fb81d116fcfdf9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker-expected.txt >@@ -0,0 +1,98 @@ >+ >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign, verify, sign, verify]) >+PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign, verify, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt >index 76b75e6789694d6ab1e1984239fb81d116fcfdf9..f3b72614b1dd7a480c13c9934f89b24a84fc8b81 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker-expected.txt >@@ -1,98 +1,17 @@ >- >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign, verify, sign, verify]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 625: "tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js >deleted file mode 100644 >index 2b50b90905858eae62f4ced5644cfe8403d7a569..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["HMAC"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..18f045fa81c354aa6b85d67c5182dab652be31f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any-expected.txt >@@ -0,0 +1,160 @@ >+ >+Harness Error (TIMEOUT), message = null >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+TIMEOUT Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) Test timed out >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b0412286c58ebcc5549963c99b70d793717c82b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js >@@ -0,0 +1,21 @@ >+// META: timeout=long >+// META: variant=?1-10 >+// META: variant=?11-20 >+// META: variant=?21-30 >+// META: variant=?31-40 >+// META: variant=?41-50 >+// META: variant=?51-60 >+// META: variant=?61-70 >+// META: variant=?71-80 >+// META: variant=?81-90 >+// META: variant=?91-100 >+// META: variant=?101-110 >+// META: variant=?111-120 >+// META: variant=?121-130 >+// META: variant=?131-140 >+// META: variant=?141-150 >+// META: variant=?151-last >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["RSA-OAEP"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a7bb0339e0759606f5f019457f8c83bd5525a0a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker-expected.txt >@@ -0,0 +1,160 @@ >+ >+Harness Error (TIMEOUT), message = null >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+TIMEOUT Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) Test timed out >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+NOTRUN Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.js >deleted file mode 100644 >index 4b3538da689681ceb504f34ca8b0066cf36131c5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["RSA-OAEP"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9cd26079b0c9484e30c3bcfba7d860539d9eab1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any-expected.txt >@@ -0,0 +1,38 @@ >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ea91c8f99b04522c519d32e81f80a9ecc5781ae7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js >@@ -0,0 +1,9 @@ >+// META: timeout=long >+// META: variant=?1-10 >+// META: variant=?11-20 >+// META: variant=?21-30 >+// META: variant=?31-last >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["RSA-PSS"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9cd26079b0c9484e30c3bcfba7d860539d9eab1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker-expected.txt >@@ -0,0 +1,38 @@ >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js >deleted file mode 100644 >index 52364f5c7f55b701988cb86a1e3f5f4716a0d2d6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["RSA-PSS"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7787e3b7af26be3edeee8b5ba27ece86a042ec1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any-expected.txt >@@ -0,0 +1,38 @@ >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..fc785f9b31c96a04f12c1d4917d4b274694d8f43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js >@@ -0,0 +1,9 @@ >+// META: timeout=long >+// META: variant=?1-10 >+// META: variant=?11-20 >+// META: variant=?21-30 >+// META: variant=?31-last >+// META: script=../util/helpers.js >+// META: script=/common/subset-tests.js >+// META: script=successes.js >+run_test(["RSASSA-PKCS1-v1_5"]); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7787e3b7af26be3edeee8b5ba27ece86a042ec1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker-expected.txt >@@ -0,0 +1,38 @@ >+ >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >+PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt >index 7787e3b7af26be3edeee8b5ba27ece86a042ec1a..783598a5b31d01239246770e7cc2941f4e4bd95e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker-expected.txt >@@ -1,38 +1,17 @@ >- >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 726: "tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js >deleted file mode 100644 >index 4c6a02a98c6251de783e63819409dde205653abc..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js >+++ /dev/null >@@ -1,7 +0,0 @@ >-// META: timeout=long >-importScripts("/resources/testharness.js"); >-importScripts("../util/helpers.js"); >-importScripts("successes.js"); >- >-run_test(["RSASSA-PKCS1-v1_5"]); >-done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt >deleted file mode 100644 >index 8a27e463c63a3915b24c938dfeb7c0d5b0686608..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html >deleted file mode 100644 >index a3054a57a99a6da759d7aa31cc88f7c1f60ae57a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test("AES-CBC"); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr-expected.txt >deleted file mode 100644 >index 5345ac939529c1fefdb61782903282d958b2fd80..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https-expected.txt >deleted file mode 100644 >index 5345ac939529c1fefdb61782903282d958b2fd80..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html >deleted file mode 100644 >index bb1abf0d948e893ae30508ee7592169fd6db5a87..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test("AES-CTR"); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt >deleted file mode 100644 >index 3ed002b291ef685c3410b2b87c9008d02c3ebe4d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https-expected.txt >deleted file mode 100644 >index 3ed002b291ef685c3410b2b87c9008d02c3ebe4d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CBC}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CBC}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html >deleted file mode 100644 >index 7650908c09a157eb907ea1169c3a76e232229f2c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["AES-CBC"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt >deleted file mode 100644 >index 9b2965260d65eff087d35876a19f79f0f7bba5e0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https-expected.txt >deleted file mode 100644 >index 9b2965260d65eff087d35876a19f79f0f7bba5e0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-CTR}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-CTR}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html >deleted file mode 100644 >index f08737c390a414f465e0e6cd715da9773c5fb233..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["AES-CTR"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt >deleted file mode 100644 >index 9afa5c3747de79559ed7f032671c153b8edc9836..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https-expected.txt >deleted file mode 100644 >index 9afa5c3747de79559ed7f032671c153b8edc9836..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https-expected.txt >+++ /dev/null >@@ -1,742 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-GCM}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-GCM}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html >deleted file mode 100644 >index 4ef6a7771025b0be26f37b9ffcbc88e1146e51f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["AES-GCM"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt >deleted file mode 100644 >index 1aac369c2d1dc7223940f4f986e7e58af4507fa9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt >+++ /dev/null >@@ -1,484 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https-expected.txt >deleted file mode 100644 >index 1aac369c2d1dc7223940f4f986e7e58af4507fa9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https-expected.txt >+++ /dev/null >@@ -1,484 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, []) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 128, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 192, name: AES-KW}, true, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, false, []) >-PASS Empty usages: generateKey({length: 256, name: AES-KW}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html >deleted file mode 100644 >index 7cbb4f8bf036455a88ef1fe31dbfddfc17ae1bf5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["AES-KW"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt >deleted file mode 100644 >index 2ec0423b8ed4ffc0fb3af81fd22a83533c9bacb5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt >+++ /dev/null >@@ -1,444 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) >-PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) >-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html >deleted file mode 100644 >index c606a5b9041c146e760b8cd9f9ccd738f3f990af..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["ECDH"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt >deleted file mode 100644 >index 02ae363500d54aa52db17f9d78915037aa5cd26b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt >+++ /dev/null >@@ -1,422 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt >deleted file mode 100644 >index 02ae363500d54aa52db17f9d78915037aa5cd26b..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt >+++ /dev/null >@@ -1,422 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) >-PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html >deleted file mode 100644 >index 8b742e80b1e1b709f6902552f6ac814ea1ff965f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["ECDSA"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt >deleted file mode 100644 >index 9ad9d91d65950dd55f1a506c9d15fd64faab92be..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt >+++ /dev/null >@@ -1,456 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https-expected.txt >deleted file mode 100644 >index 9ad9d91d65950dd55f1a506c9d15fd64faab92be..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https-expected.txt >+++ /dev/null >@@ -1,456 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, []) >-PASS Empty usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html >deleted file mode 100644 >index e037f0d07d55cdde38a22ed2e9fd89e8cb31d3f3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["HMAC"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https-expected.txt >deleted file mode 100644 >index e80c3f82fb6b13ddc3af85b8ecf0660c98d7429d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https-expected.txt >+++ /dev/null >@@ -1,500 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, encrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, decrypt]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey, wrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html >deleted file mode 100644 >index ddd63beb343022461efb02347acc706715173c64..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["RSA-OAEP"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https-expected.txt >deleted file mode 100644 >index 67730a3966acc70d2fa9b16c17799a781dc17acf..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https-expected.txt >+++ /dev/null >@@ -1,396 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [verify, sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [verify, sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >-FAIL Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html >deleted file mode 100644 >index 2814b34e9a443d29a05cd01bf47bf5e9a1bdfee0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["RSA-PSS"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https-expected.txt >deleted file mode 100644 >index 1260d4fd2b885143e858966cbfaa77e1efb1022e..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https-expected.txt >+++ /dev/null >@@ -1,396 +0,0 @@ >-generateKey Tests for Bad Parameters >- >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html >deleted file mode 100644 >index 0e28914af806939833b8f0f08901be0baabd0bb8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html >+++ /dev/null >@@ -1,18 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() for Failures</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="failures.js"></script> >- >-<h1>generateKey Tests for Bad Parameters</h1> >- >-<div id="log"></div> >-<script> >-run_test(["RSASSA-PKCS1-v1_5"]); >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt >deleted file mode 100644 >index 8a27e463c63a3915b24c938dfeb7c0d5b0686608..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https-expected.txt >deleted file mode 100644 >index 8a27e463c63a3915b24c938dfeb7c0d5b0686608..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html >deleted file mode 100644 >index af809353900783157f64f547b7c9b652fca53a23..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["AES-CBC"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt >deleted file mode 100644 >index 5345ac939529c1fefdb61782903282d958b2fd80..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https-expected.txt >deleted file mode 100644 >index 5345ac939529c1fefdb61782903282d958b2fd80..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html >deleted file mode 100644 >index 3608a4fde35bf7cae0158ba6e51cc88b7a8daa0d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["AES-CTR"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https-expected.txt >deleted file mode 100644 >index 6654b6071ad5e8b3b41b8c1fc9dd0bc5e4cbe9d6..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https-expected.txt >+++ /dev/null >@@ -1,294 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-gcm}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html >deleted file mode 100644 >index eb7c6b5d006945a90684c169b016ed74463364f3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["AES-GCM"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https-expected.txt >deleted file mode 100644 >index 324ee593ba0bdf85049befdec816e75ee2c6a866..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https-expected.txt >+++ /dev/null >@@ -1,78 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 128, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 192, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >-PASS Success: generateKey({length: 256, name: Aes-kw}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html >deleted file mode 100644 >index 9beab20834660d775d6cd9982700f7da169a3566..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["AES-KW"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt >deleted file mode 100644 >index 08703dacfa43e2df271b708c2932976f9f70fb7a..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt >+++ /dev/null >@@ -1,78 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt >deleted file mode 100644 >index 7138a1f001fd0a41ddafeb086a148d176031fdda..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt >+++ /dev/null >@@ -1,78 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html >deleted file mode 100644 >index 9871f572b05c0fd040b4cc85ba964b8093728862..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["ECDH"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt >deleted file mode 100644 >index 998c81dedc0b4e86fcddc9e00eafcc6099958492..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt >+++ /dev/null >@@ -1,60 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html >deleted file mode 100644 >index f32a556bb24ac6b37aa6353f9bf5c8e474683595..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["ECDSA"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https-expected.txt >deleted file mode 100644 >index 66e9c82c3bbecdb166857a98623fba5f3413aafd..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https-expected.txt >+++ /dev/null >@@ -1,102 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign, verify, sign, verify]) >-PASS Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign, verify, sign, verify]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html >deleted file mode 100644 >index 819b35df08c5185104fc8284cd915c9d91a5ba26..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["HMAC"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https-expected.txt >deleted file mode 100644 >index 4abad5cbb953cede0e4b0f6169ac5039517cb892..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https-expected.txt >+++ /dev/null >@@ -1,162 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-oaep, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html >deleted file mode 100644 >index db58fd6690ab4884525af6918e53392ff9326e6d..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["RSA-OAEP"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt >deleted file mode 100644 >index e02cb0683bfc271dd5531f8afd6096e56567af40..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt >+++ /dev/null >@@ -1,42 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https-expected.txt >deleted file mode 100644 >index d9f9e4a26485c327c57a877404529503e06619f9..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https-expected.txt >+++ /dev/null >@@ -1,42 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >-FAIL Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The operation is not supported. Reached unreachable code >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html >deleted file mode 100644 >index d6a3c1b02d0c650aecad3f52ee62f2754512612c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["RSA-PSS"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https-expected.txt >deleted file mode 100644 >index 07e6dc777d4b3ecc596834e9b3b0fd6c7886c0ef..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https-expected.txt >+++ /dev/null >@@ -1,42 +0,0 @@ >-generateKey Tests for Good Parameters >- >-Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser! >- >- >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-V1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsassa-pkcs1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html >deleted file mode 100644 >index 35678798bdf77762a771e411bcb6c5619ca47df1..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html >+++ /dev/null >@@ -1,23 +0,0 @@ >-<!DOCTYPE html> >-<meta charset=utf-8> >-<meta name="timeout" content="long"> >-<title>WebCryptoAPI: generateKey() Successful Calls</title> >-<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com"> >-<link rel="help" href="https://www.w3.org/TR/WebCryptoAPI/#dfn-SubtleCrypto-method-generateKey"> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >- >-<script src="/WebCryptoAPI/util/helpers.js"></script> >-<script src="successes.js"></script> >- >-<h1>generateKey Tests for Good Parameters</h1> >-<p> >- <strong>Warning!</strong> RSA key generation is intrinsically >- very slow, so the related tests can take up to >- several minutes to complete, depending on browser! >-</p> >- >-<div id="log"></div> >-<script> >-run_test(["RSASSA-PKCS1-v1_5"]); >-</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/w3c-import.log >index c78228a7490826e002f2ac5f1b2a2e3f49a2b100..6d42c6bad61a26dc0ae9b4e20f961cb9123c16ec 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/w3c-import.log >@@ -15,46 +15,24 @@ None > ------------------------------------------------------------------------ > List of files: > /LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.worker.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_AES-KW.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_HMAC.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js > /LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.worker.js >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-cbc.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_aes-ctr.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_AES-KW.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_HMAC.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSA-PSS.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_AES-KW.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_HMAC.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSA-PSS.https.html >-/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.https.html >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_AES-KW.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_HMAC.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js >+/LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f13d3be0ee02768f3123f06d67505f61ce661441 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object-expected.txt >@@ -0,0 +1,5 @@ >+ >+PASS Default iterator objects for an interface have the same prototype >+PASS Object.prototype.toString returns correct value >+FAIL @@toStringTag has correct value from prototype assert_equals: expected (string) "URLSearchParams Iterator" but got (undefined) undefined >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object.html b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c7e9188521a2ae0bc9f15ff9bcaefc55a5253ce2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object.html >@@ -0,0 +1,27 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Default iterator objects</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(() => { >+ const iterator1 = new URLSearchParams()[Symbol.iterator](); >+ const iterator2 = new URLSearchParams().keys(); >+ const iterator3 = new URLSearchParams().values(); >+ const iterator4 = new URLSearchParams().entries(); >+ assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator2)); >+ assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator3)); >+ assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator4)); >+}, "Default iterator objects for an interface have the same prototype"); >+ >+test(() => { >+ const iterator = new URLSearchParams().entries(); >+ assert_equals(Object.prototype.toString.call(iterator), "[object URLSearchParams Iterator]"); >+}, "Object.prototype.toString returns correct value"); >+ >+test(() => { >+ const iterator = new URLSearchParams().entries(); >+ assert_equals(iterator[Symbol.toStringTag], "URLSearchParams Iterator"); >+ assert_equals(Object.getOwnPropertyDescriptor(iterator, Symbol.toStringTag), undefined); >+}, "@@toStringTag has correct value from prototype"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7f321fbfc29e538dc4d00fb8f20d00f29cd1c3c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS Has %IteratorPrototype% as prototype >+PASS next() exists and is writable, enumerable, and configurable >+PASS next() throws TypeError when called on ineligible receiver >+PASS Object.prototype.toString returns correct value >+FAIL @@toStringTag has correct value undefined is not an object (evaluating 'Object.getOwnPropertyDescriptor(iteratorProto, Symbol.toStringTag).value') >+PASS Is specific to an interface >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object.html b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5a935fa20135d88a7268b872b68ab7fe548ab5c7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object.html >@@ -0,0 +1,56 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Iterator prototype objects</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(() => { >+ const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); >+ const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries()); >+ assert_equals(Object.getPrototypeOf(iteratorProto), esIteratorPrototype); >+}, "Has %IteratorPrototype% as prototype"); >+ >+test(() => { >+ const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries()); >+ const desc = Object.getOwnPropertyDescriptor(iteratorProto, "next"); >+ assert_equals(typeof desc.value, "function"); >+ assert_equals(desc.writable, true); >+ assert_equals(desc.enumerable, true); >+ assert_equals(desc.configurable, true); >+}, "next() exists and is writable, enumerable, and configurable"); >+ >+test(() => { >+ const usp = new URLSearchParams(); >+ const iteratorProto = Object.getPrototypeOf(usp.entries()); >+ >+ assert_throws(new TypeError(), () => { >+ iteratorProto.next(); >+ }); >+ assert_throws(new TypeError(), () => { >+ iteratorProto.next.call(undefined); >+ }); >+ assert_throws(new TypeError(), () => { >+ iteratorProto.next.call(42); >+ }); >+ assert_throws(new TypeError(), () => { >+ iteratorProto.next.call(new Headers().entries()); >+ }); >+}, "next() throws TypeError when called on ineligible receiver"); >+ >+test(() => { >+ const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries()); >+ assert_equals(Object.prototype.toString.call(iteratorProto), "[object URLSearchParams Iterator]"); >+}, "Object.prototype.toString returns correct value"); >+ >+test(() => { >+ const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries()); >+ assert_equals(Object.getOwnPropertyDescriptor(iteratorProto, Symbol.toStringTag).value, "URLSearchParams Iterator"); >+ // Property attributes have not yet been fully spec'd. >+}, "@@toStringTag has correct value"); >+ >+test(() => { >+ const iteratorProto1 = Object.getPrototypeOf(new URLSearchParams().entries()); >+ const iteratorProto2 = Object.getPrototypeOf(new Headers().entries()); >+ assert_not_equals(iteratorProto1, iteratorProto2); >+}, "Is specific to an interface"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..00dda562a881688680b43b1daba9e1725c93e4c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Conversion to a dictionary works >+PASS Conversion to a sequence works >+PASS Can convert a RegExp to a USVString >+PASS Can be used as an object implementing a callback interface >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.html b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.js b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4446dbf69c02ab466ad03fd69d6ed3924d8e84a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.js >@@ -0,0 +1,47 @@ >+"use strict"; >+// RegExps used to be special-cased in Web IDL, but that was removed in >+// https://github.com/heycam/webidl/commit/bbb2bde. These tests check that implementations no longer >+// do any such special-casing. >+ >+test(() => { >+ const regExp = new RegExp(); >+ regExp.message = "some message"; >+ >+ const errorEvent = new ErrorEvent("type", regExp); >+ >+ assert_equals(errorEvent.message, "some message"); >+}, "Conversion to a dictionary works"); >+ >+test(() => { >+ const messageChannel = new MessageChannel(); >+ const regExp = new RegExp(); >+ regExp[Symbol.iterator] = function* () { >+ yield messageChannel.port1; >+ }; >+ >+ const messageEvent = new MessageEvent("type", { ports: regExp }); >+ >+ assert_array_equals(messageEvent.ports, [messageChannel.port1]); >+}, "Conversion to a sequence works"); >+ >+promise_test(async () => { >+ const regExp = new RegExp(); >+ >+ const response = new Response(regExp); >+ >+ assert_equals(await response.text(), "/(?:)/"); >+}, "Can convert a RegExp to a USVString"); >+ >+test(() => { >+ let functionCalled = false; >+ >+ const regExp = new RegExp(); >+ regExp.handleEvent = () => { >+ functionCalled = true; >+ }; >+ >+ self.addEventListener("testevent", regExp); >+ self.dispatchEvent(new Event("testevent")); >+ >+ assert_true(functionCalled); >+}, "Can be used as an object implementing a callback interface"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..00dda562a881688680b43b1daba9e1725c93e4c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS Conversion to a dictionary works >+PASS Conversion to a sequence works >+PASS Can convert a RegExp to a USVString >+PASS Can be used as an object implementing a callback interface >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/w3c-import.log >index f271c5ff8b58a0dd25b21056d0510fd7eace9cab..2df80d5462dbabc72362b29b68e20c91bbee5a3f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/w3c-import.log >@@ -14,10 +14,13 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/default-iterator-object.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/has-instance.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/interface-object.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/interface-prototype-object.html >+/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/iterator-prototype-object.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/legacy-callback-interface-object.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/legacy-platform-object.html >+/LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/no-regexp-special-casing.any.js > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/put-forwards.html > /LayoutTests/imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/sequence-conversion.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt >index c4d14134c039a5df678380334f41c7c85e1c0a65..78040e091a04d5b07854f8f403ed6d925bfa3313 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-denied-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: line 26: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > > PASS Same-origin request accepted > PASS Cross-origin request denied >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt >index bb2408d88c76a1b931d8ad779fab959d0eb80f06..48afa24517a2030748ba2832f8a348e6605ebb35 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-non-cors-safelisted-content-type-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: line 26: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-put-allow.py due to access control checks. >+CONSOLE MESSAGE: line 26: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-put-allow.py. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. > > PASS Deny cross-origin request with non-CORS-safelisted content type > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt >index 155457e96adb14bbe5c885788f12dde51ca315ea..1b3edfcc9f2998fdae948fc9605887a5bbe46b69 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-basic-preflight-denied-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-basic-denied.py. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > > PASS Tests async XHR preflight denial due to lack of CORS headers > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt >index 784532bd9adee28dd66d4a864f333f99bfd49d33..34cd7a6732b9a0963aa6638203abe13df61936a2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-301-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=301 due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=301. Preflight response is not successful > > PASS Request with 301 preflight response > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt >index 95c44a23f9bb9e8f51b2e3598ebbffee934f82d9..bd077432873b1dc48ce32df0d459a9ca86f57131 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-400-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=400 due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=400. Preflight response is not successful > > PASS Request with 400 preflight response > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt >index 806e9c7ef93e7b0b7396075288124bc66430141d..7db466e42a76f8c2ba8767942924aaf1f64c7438 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-preflight-request-invalid-status-501-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=501 due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/access-control-preflight-request-invalid-status.py?code=501. Preflight response is not successful > > PASS Request with 501 preflight response > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt >index da4536648715d8f9c9621cbe7c4e6c33b54c5a0c..b9bd42bb4f774a3448bc6e4186c193f4b62d24c9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain) due to access control checks. >+CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://localhost:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain). Origin null is not allowed by Access-Control-Allow-Origin. > > > PASS Check that path exists and is accessible via local XHR request >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >index 2da47a4a1983498ae94021f54c9ce874b0118ec1..bea97102f42e9e9840f1a86f73d095aa6f6aedbe 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/access-control-sandboxed-iframe-denied-without-wildcard-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: line 12: Origin null is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain)header(Access-Control-Allow-Credentials,true)|header(Access-Control-Allow-Origin,http://localhost:8800) due to access control checks. >+CONSOLE MESSAGE: line 12: XMLHttpRequest cannot load http://127.0.0.1:8800/XMLHttpRequest/resources/pass.txt?pipe=header(Cache-Control,no-store)|header(Content-Type,text/plain)header(Access-Control-Allow-Credentials,true)|header(Access-Control-Allow-Origin,http://localhost:8800). Origin null is not allowed by Access-Control-Allow-Origin. > > > PASS Check that path exists and is accessible via CORS XHR request >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >index 50328c60d08c8c46207f4b4b610515e74f4cd9da..8c0bfa246fad440e965e34ac737187d8c6de18c1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-authentication-basic-cors-expected.txt >@@ -1,5 +1,4 @@ >-Blocked access to external URL http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py >-CONSOLE MESSAGE: line 31: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/XMLHttpRequest/resources/auth1/corsenabled.py due to access control checks. > > PASS XMLHttpRequest: send() - "Basic" authenticated CORS requests with user name and password passed to open() (asserts failure) > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >index 2f459f587478eae2dd51c9dde619374d795b9057..bd71159a90bbc3aa111be2133b17fa145ed85061 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-network-error-async-events.sub-expected.txt >@@ -1,5 +1,4 @@ >-Blocked access to external URL http://nonexistent-origin.localhost:8800/ >-CONSOLE MESSAGE: line 43: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://nonexistent-origin.localhost:8800/ due to access control checks. > > PASS XMLHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset) > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt >index 155f5a44c167db2c65b9fefef322c3fe13a29704..b77e30269f15a1e6e1bfdaa30058dcb9d7d075cf 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin-expected.txt >@@ -1,17 +1,10 @@ >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >-CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >-CONSOLE MESSAGE: line 21: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load about:blank due to access control checks. >-CONSOLE MESSAGE: line 21: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load blob:bogusidentifier due to access control checks. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load mailto:test@example.org. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load tel:+31600000000. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load javascript:alert('FAIL'). Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load about:blank. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 21: XMLHttpRequest cannot load blob:bogusidentifier. Cross origin requests are only supported for HTTP. > > PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) > PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt >index ee88c8520b383ed7c0fb88703ecb328233e02d2c..c3e2a8a687d34a31507be03030097f2a0ef62807 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/XMLHttpRequest/send-non-same-origin.sub-expected.txt >@@ -1,13 +1,8 @@ >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load mailto:test@example.org due to access control checks. >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load tel:+31600000000 due to access control checks. >-CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/ due to access control checks. >-CONSOLE MESSAGE: line 23: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load javascript:alert('FAIL') due to access control checks. >-CONSOLE MESSAGE: line 23: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt due to access control checks. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load mailto:test@example.org. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load tel:+31600000000. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load javascript:alert('FAIL'). Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 23: XMLHttpRequest cannot load http://127.0.0.1:8800/folder.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > > PASS XMLHttpRequest: send() - non same-origin (mailto:test@example.org) > PASS XMLHttpRequest: send() - non same-origin (tel:+31600000000) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/accname/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/accname/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..2a4c47ed4df0b500dc798a3148175c923410f9c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/accname/OWNERS >@@ -0,0 +1,2 @@ >+@halindrome >+@joanmarie >diff --git a/LayoutTests/imported/w3c/web-platform-tests/accname/foo.jpg b/LayoutTests/imported/w3c/web-platform-tests/accname/foo.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..7d11a4f7cf13a9a8e9ab3f7007673670a1d4055b >GIT binary patch >literal 6735 >zcmex=<NpH&0WUXCHwH#VMur3+WcYuZ!I^=Bjg6g+m4ls~os*M;i${c)hnt&6Qb?Fz >zL{>^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<<Uft5x!pKI?*u)5A2qPyaCl5D|1TU|I >zk)n*E5y{~H0R}-1#+}R#%#2D5OoEKef{g!<Fvv47FtP$&3vw_NFfuW-u(GjpaB^`2 >z6>Jq?U}9uuW@2GxWo2Ojs;&jfGq4D<3Mm>ovIz$!vMUve7&T5@$f4}C@t|nX#SbdR >zNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w9-dyoA)#U65s^{JDXD4c8JStdC8cHM >z6_r)ZEv;?s9i3g1CQq3<ZTgIvvlcC0vUJ(<6)RV5+Pr1!w(UE1?mBe%$kAiRPn<k; >z>GGAU*RJ2VdF$b$$4{O<d;a3(tB;>PfBE|D`;VW$K>lK6V1{@L?lUxh2?G7a#KOYN >z!VdBmBU3pLGYhh?DjKp0IR>&P778mFHFAhJO<cI~Ag8i%&<D|^qKjN&DkcwAKZ3jl >z_8D;=Ya+{MaE~GUb&G+AnGqOy%z_N|3}4sQhwR#Lsb!nL&>h>edpIsDmc$#S^h{bf >zWe&T#q^$P2{SR}_|7URI_|NdctNy3auJ^)T?-wh(i(Hm?udABUrZ(~0(jz%Xw3_@F >z)EjT@Nvr3KxwW9Wd%Y^>flQOvPg#ByvzGWqz9_ipxz_Kcoo4(U*CJj0+<O&km(2}| >zRh$@ox_3^~p%)V;>^R3;bwwy|uA6`T(|D_>inMRnq-QS?7gv0<PPtd%a=zz;liZ6Q >zY*8ppJZbv=nsDCUp7eF~6PHYVbX;Z1<K(<9jWv817IkSb3~|gf|6AzvKOg@y9KZc1 >zTRQp!f7>3HkK0x!sve(a(EV-aRQG*X3yjalr0t5*+-ZJgD#zN1y-O>?-7n^ZojP>O >z<L#BFf$vl%=Wn=kr17}p@#j&35z&qclPo?wUU<j<>uQt0Gv9U;xqaUd=ql31rLm}C >z6px0%Xc`zz1EXnRG!2ZVfzdQDng&MGz-Ss6O#`E8U^ESkrh(BkFq#HN)4*sN7)=AC >MX<%rk0sH?q0c!v9bN~PV > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/accname/test.png b/LayoutTests/imported/w3c/web-platform-tests/accname/test.png >new file mode 100644 >index 0000000000000000000000000000000000000000..85cfa35fd13f3f8a4dda61067b65297889c0b811 >GIT binary patch >literal 1913 >zcmeAS@N?(olHy`uVBq!ia0vp^l0YoM!2~25t{<ETq&N#aB8wRq_>O=u<5X=vX$A&% >zZBG}+kcwN33heiPF#Mq&7>Z`yxqE-lfx~zZPyuoX;qxQVl>c}EPys1s{r#P~<_#vw >z+Vl=+3t_X6z4reL$e{lz%r{J!-g`6EpZEbmM49#X`z@%~{{Hy?>%;%|&;MI9{&xf- >zroW*qKto9|>))4?2luZ5x*y`N|M$=Rw`Y9o%y=l0@oP5I{{qIpdF(*rh;rBei}}w^ >zHU9tgWZjgSyPiycZ=L_)$22j4u{o3R_FTsQevB_H7=dPGZzdwV{vQkfeme92_p3`* >zPJf-i`v2bfPtHtxJJ`-_<9fP=?|TN**9K6i<!$>wIPCu)4*PLB18CNyb^EW|Fnzgp >z?!G6>#}d{%t*jS4S^n2DeobR+-TfYjh%qbT-US@k;~O^y!!c4o`pN9TV&JpcFM >z`9Cjj{eS-mXapP(NE820X8u1O@&EIw&eQMKOl&+|pubUv;aLXb5og9@evF{>0Zvvx >zQ-Fv-y8riN{r{uk|F2c8zjCqj?9XZ2&d;5?bmP2fvwNqmoH+w-7IJcjv(fVqFn#?w >z67&CL^#3OdfIj{I{~z2(a0Z&!aGLe!*QdX4_We5vG%o7xiSjeYmL5O6a{r+N5Km$C >z8g8?|GJn6^_<t!E6mUnP{@t7L@58o#pZ5ckG04@p0lFXID*yg?`1jSWe-|qLAB_6H >z)%X7f?|<8p|DEXn`}Q_m4H^TdS!n8r;f|U`Oei7L^vZbd>*o2I2CPdNJYD@<);T3K >F0RXv4Uef>o > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/accname/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/accname/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..f436b19822701f385252491376eebdbd15bf77dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/accname/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/accname/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/accname/foo.jpg >+/LayoutTests/imported/w3c/web-platform-tests/accname/test.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/acid/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..fd31fb27543a5124263c1c329e80b6ea652ca16b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/OWNERS >@@ -0,0 +1 @@ >+@Ms2ger >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/README.md b/LayoutTests/imported/w3c/web-platform-tests/acid/README.md >new file mode 100644 >index 0000000000000000000000000000000000000000..490f272df9c743fb61c99f1e193f7d5f96fac6a6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/README.md >@@ -0,0 +1,17 @@ >+## The Acid Tests >+ >+This directory contains copies of Acid2 and Acid3, based on the >+copies hosted at [acidtests.org](http://www.acidtests.org) after they >+had ceased being maintained (per the note on that page). >+ >+Note these are not maintained here for the sake of providing any >+useful guide of interoperability or standards compliance, but rather >+for browser vendors' convenience. It would be inappropriate, >+therefore, to use them as part of a certification process. >+ >+Acid1 can be found at `css/CSS2/css1/c5526c-display-000.xht`, as it >+always formed part of the CSS1 testsuite. >+ >+The tests themselves (i.e., those at `/` of their respective >+subdomains at `acidtests.org`) are in files named test.html in their >+respective directories. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/404.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/404.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a17f4ecb85ab33ffce52d20e9cc8b1c7c109b0af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/404.html >@@ -0,0 +1,2 @@ >+<style>body { background: red; }</style> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reference.png b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reference.png >new file mode 100644 >index 0000000000000000000000000000000000000000..7aee7609d6ade6e39ad53b04a9f61e55f3b00c76 >GIT binary patch >literal 2261 >zcmZvecT^L|7KbC!qzedn8x+GTMFL1!kN}}~hzJQ5qzY1$B7_hUP>7)g2uchVq&MjT >zA}G>U5=5FTi$JJ?6lqDQK|mhvThDRd**P<J?wR|Wx#!-0zDclyn+x*&!Uq5V1T8I0 >z><{*5-xn{(f!$G1n+5=QpIVw2A~5vj3~L+E;0aoDm2>m^PE}dWVqeG!qLa-4I$DN6 >zL?{qHJ6aAv&VbR*&;3$gE-JrXQHnk$>J@XZS|HH^NwGjkSQ+>gOs(Uy?}-;tRc)k# >zS~O{}uvXq&jW40Qw7H!Q{?4@Jz@FZaS+@RM(lIb62}I0AATp<iVxb}mIT)gx_<8wE >zJKY?N5sNT&gepdqqr~Stkam3b3$B1d<F9kZ<9-hQP!r`=bHqzvPi-5&0^#~9<w+2$ >zZ!xP>y-a7lpPu@mwpaB;ma5!3ej5iOawKwbzhwoC?nSmui*SU7#)vs)V{dc)<}VW+ >z1WZpK8jI<UC6TVFz%poedE(97YjdlP!sWVVtvVc!+JaK1`+g-D@y3WGoXnu%7_Ex~ >znUT9db#-3O=hgUfCBU;v^Bam-TwniPF}e3-?Q{fIPg9GvSovYG?@!J;P=FRZlR!0M >zwTz!Q0c&G4Pp9aUptM5S^79RmpuD_C8B`i~s^xN2uKd}@L3_~G4XWqjh4mq!vk(Ub >zz9&zz2e08kRlslGKqbVw30ivK?>-N9fX#Jr`ulCWx*tD^BpOz>7dy<a#J1nvi@e%Q >z`s5CQWY^UNy1BK?tqtGQ1oZi600rPSHk=&&E-K2dH1DjO!b0)ojrA|31!};ceb{wx >z)}X6J(FLc(GznDb%u178J6kO=#e~_Z!pnU$<#1Ggf-ua$oCgKnWgc$Yli+^)MWv~J >zbYdc~ZX_!iOt3?S1_uXwdSdSEw`xsHuJu}jVR4AZ0%>W?wO-!1LoFWBy>VL;<__et >zDY7L*d8+5QE;hf`!c}@aoJUqHV1h<b92(Zv(?E4Iw&YAav|pkamO*+=LM>jmLN(d+ >z8#-OY?b+`1i<K_ndmB816~`KTd$o~j2@|*9uD{sagN2KF_fB>F=aG#)X(0<{Do?m1 >z0C2$x`uj7n?rNV{*OEvc?uRBK!-g4Kr3xEG8`4EaTKK;0AQ^!cU-Z|T&XS{&y{~$9 >z_P*_GG4AYb4D?-ivlDQ%9UES_ie)ju5|a0=z!Jvt1g-IRrn^<rqXqp#bR!L-rzjxF >z45LfGg}u&QQ!~H3yvSgjk8eA_sDFEZVjmKqBGrWU5A#2mr(beRift9`?d>@@IMmei >ztE;ow(;i$s>PTBb-4kUMG87}V1RrrHCm)|E7nRF1aNeaABjo)KfPt;x5_-AV00063 >zfxzb@%bisP#UGNrN4D-!mtzjRnW5CN0BIm_XvpBCU0cg`QT0e|AX@e?lDZP0?VXio >z8zFnwgafNbh-!_Znf*E7%k!La>=c=~9YM?;#fb`-&AD#Mw$AT1${Ctoh=94OB~U0b >z+&$`)-0TXW<m9u!lbq|=Q=;^TF3PMg8mQNKIaacVOOXxDwOrsJCdgN>>2?rjB>0mF >z+s)0ZW|;7SPr+1XAK|!o-`6x69*4RDV@dGa$j+na-F^dR;Yb?@cj<-?*|sn^jrl$t >zT~Wxb2_i&^#8XLU);2cm#7*-0?oL?1Yu3CNlNvhC5`%^;lM8mPu5B;2i`0N3iM}H@ >zYADa95D8Pqg~~P3tqhS>HF<*QD^BieV4wgW7z&DjISqD>w|Xxw++-dB<6E;k2p>Pn >z6n3jqM23c=OJpd2SiKU8E1N2J)X>T+;4=F))v~O@ZwiO|6y)aNVT2smq?7np61^AR >z>_==rhBCOesGD>lBvMXRR!V4nQ$p20vzXAba3<9fnC#<g7_!#)$PCH?TvdKi+j`wt >zmsD_iY1xo>eLcGY6y37^`E&kd)vS<={nhfy-6EJ@)k|QgSzgbOhd(Rp>wITj6Lbz5 >z=-5RjlcQTuVOm%$5%^mc!pJR9*xEY2-MuEKTu}MqV;(6ln9ksbs7>@KGQEo*X&Ryq >zf7&v6QbJNyO>K#V*}c6lw{l(w6rrL>A|(mn8i7)f6$N^P{gFe+7%E5H;pJtYKyzc` >zS8-2d_^ToBKBKJ*M1-yd2!$~`a69v?D%JWiCI&7nC}=8k9|g?_k3~U`Cz!;>#_DGF >z2WZh~!NN?dx~C5QfzvC_UEN?QvojQ26kc1Y0Rz6*;pT0gj=#lrgTz*;qR>W_=B}<2 >zY&LszbaeHvap17o7+2RUmy{lOQu6WSw8Y3xZ6q|=f>TH5o#!f_9db%IeKt#Y{B?}= >z!%6hpo3N5idA_de^<(v@BXt23i|}v7F7?qfqOJ*KrL1cqVqq(9Fsc2+H9j{Xz2NGr >z#U-9H+zJmdJ*5vf_#e!$(h-*{Tl8G)<um_>mmf^{!5bAFBA#PU@+?(aaj|zS2a{0N >zx#S}ED%5vu(Z?CS1-<gHzmfED2346Cs{L<A7t7gr2uJZ0<<!9Fz+7?p>p@}U_N20R >zII`KV?CYJLnQXh*TD-k@kc(yhDMb@6h2iUwN=Gc|#)V{!{fi}t($*QM(vFIsR|9tx >zN=(&7{?hM?`tQzdENFKJyD*IZ=tzsJE@*t8c&J)tJ0`L|8~<-*kcm0@`*!!oniUbg >z#*#iG+rq~PKa;TNZ@iLA^77Xf_>qY)5`wPHyTV#p_=~y!YzmnOE)Czf+;|~+cHCMi >z&md&>Rr>*$zl;8vJh)8$QaP+tSn)&twpHo2q@R+3f^$%c_r?Eb`uD2{fz#y!k`Ppk >rv;5q-m*6c7dgE{6|D4^D%G5vlSW`2yTA=9Qy8^H@g_~3ux#9l{WcO5+ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest-expected.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..66eed5ae3553c879af28cf8d4b479dac7adfd0f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest-expected.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>The Second Acid Test (Reference Rendering)</title> >+ <style type="text/css"> >+ html { margin: 0; padding: 0; border: 0; overflow: hidden; background: white; } >+ body { margin: 0; padding: 0; border: 0; } >+ h2 { margin: 0; padding: 48px 0 36px 84px; border: 0; font: 24px/24px sans-serif; color: navy; } >+ p { margin: 0; padding: 0 0 0 72px; border: 0; } >+ img { vertical-align: top; margin: 0; padding: 0; border: 0; } >+ </style> >+ </head> >+ <body> >+ <h2>Hello World!</h2> >+ <p><a href="reference.png"><img src="reference.png" alt="Follow this link to view the reference image, which should be rendered below the text "Hello World!" on the test page in the same way that this paragraph is rendered below that text on this page."></a></p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0f9b9ac023535183a534608e8df4a709ed269b11 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<title>Acid2 reftest</title> >+<link rel="match" href="reference.html"> >+<style> >+* { >+ margin: 0; >+ padding: 0; >+ border: 0; >+} >+iframe { >+ width: 400px; >+ height: 300px; >+} >+</style> >+<iframe src="test.html#top"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/test.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0407bac5dc45a406f4e38612521f671e8d136d47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/test.html >@@ -0,0 +1,150 @@ >+<!-- >+A guide to Acid2 was posted alongside it as part of its original announcement; this can be found at: >+https://www.webstandards.org/action/acid2/guide/ >+--> >+ >+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>The Second Acid Test</title> >+ <style type="text/css"> >+ /* section numbers refer to CSS2.1 */ >+ >+ /* page setup */ >+ html { font: 12px sans-serif; margin: 0; padding: 0; overflow: hidden; /* hides scrollbars on viewport, see 11.1.1:3 */ background: white; color: red; } >+ body { margin: 0; padding: 0; } >+ >+ /* introduction message */ >+ .intro { font: 2em sans-serif; margin: 3.5em 2em; padding: 0.5em; border: solid thin; background: white; color: black; position: relative; z-index: 2; /* should cover the black and red bars that are fixed-positioned */ } >+ .intro * { font: inherit; margin: 0; padding: 0; } >+ .intro h1 { font-size: 1em; font-weight: bolder; margin: 0; padding: 0; } >+ .intro :link { color: blue; } >+ .intro :visited { color: purple; } >+ >+ /* picture setup */ >+ #top { margin: 100em 3em 0; padding: 2em 0 0 .5em; text-align: left; font: 2em/24px sans-serif; color: navy; white-space: pre; } /* "Hello World!" text */ >+ .picture { position: relative; border: 1em solid transparent; margin: 0 0 100em 3em; } /* containing block for face */ >+ .picture { background: red; } /* overriden by preferred stylesheet below */ >+ >+ /* top line of face (scalp): fixed positioning and min/max height/width */ >+ .picture p { position: fixed; margin: 0; padding: 0; border: 0; top: 9em; left: 11em; width: 140%; max-width: 4em; height: 8px; min-height: 1em; max-height: 2mm; /* min-height overrides max-height, see 10.7 */ background: black; border-bottom: 0.5em yellow solid; } >+ >+ /* bits that shouldn't be part of the top line (and shouldn't be visible at all): HTML parsing, "+" combinator, stacking order */ >+ .picture p.bad { border-bottom: red solid; /* shouldn't matter, because the "p + table + p" rule below should match it too, thus hiding it */ } >+ .picture p + p { background: maroon; z-index: 1; } /* shouldn't match anything */ >+ .picture p + table + p { margin-top: 3em; /* should end up under the absolutely positioned table below, and thus not be visible */ } >+ >+ /* second line of face: attribute selectors, float positioning */ >+ [class~=one].first.one { position: absolute; top: 0; margin: 36px 0 0 60px; padding: 0; border: black 2em; border-style: none solid; /* shrink wraps around float */ } >+ [class~=one][class~=first] [class=second\ two][class="second two"] { float: right; width: 48px; height: 12px; background: yellow; margin: 0; padding: 0; } /* only content of abs pos block */ >+ >+ /* third line of face: width and overflow */ >+ .forehead { margin: 4em; width: 8em; border-left: solid black 1em; border-right: solid black 1em; background: red url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4%2F58BAAT%2FAf9jgNErAAAAAElFTkSuQmCC); /* that's a 1x1 yellow pixel PNG */ } >+ .forehead * { width: 12em; line-height: 1em; } >+ >+ /* class selectors headache */ >+ .two.error.two { background: maroon; } /* shouldn't match */ >+ .forehead.error.forehead { background: red; } /* shouldn't match */ >+ [class=second two] { background: red; } /* this should be ignored (invalid selector -- grammar says it only accepts IDENTs or STRINGs) */ >+ >+ /* fourth and fifth lines of face, with eyes: paint order test (see appendix E) and fixed backgrounds */ >+ /* the two images are identical: 2-by-2 squares with the top left >+ and bottom right pixels set to yellow and the other two set to >+ transparent. Since they are offset by one pixel from each other, >+ the second one paints exactly over the transparent parts of the >+ first one, thus creating a solid yellow block. */ >+ .eyes { position: absolute; top: 5em; left: 3em; margin: 0; padding: 0; background: red; } >+ #eyes-a { height: 0; line-height: 2em; text-align: right; } /* contents should paint top-most because they're inline */ >+ #eyes-a object { display: inline; vertical-align: bottom; } >+ #eyes-a object[type] { width: 7.5em; height: 2.5em; } /* should have no effect since that object should fallback to being inline (height/width don't apply to inlines) */ >+ #eyes-a object object object { border-right: solid 1em black; padding: 0 12px 0 11px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAAEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVORK5CYII%3D) fixed 1px 0; } >+ #eyes-b { float: left; width: 10em; height: 2em; background: fixed url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAABnRSTlMAAAAAAABupgeRAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAAEUlEQVR42mP4%2F58BCv7%2FZwAAHfAD%2FabwPj4AAAAASUVORK5CYII%3D); border-left: solid 1em black; border-right: solid 1em red; } /* should paint in the middle layer because it is a float */ >+ #eyes-c { display: block; background: red; border-left: 2em solid yellow; width: 10em; height: 2em; } /* should paint bottom most because it is a block */ >+ >+ /* lines six to nine, with nose: auto margins */ >+ .nose { float: left; margin: -2em 2em -1em; border: solid 1em black; border-top: 0; min-height: 80%; height: 60%; max-height: 3em; /* percentages become auto (see 10.5 and 10.7) and intrinsic height is more than 3em, so 3em wins */ padding: 0; width: 12em; } >+ .nose > div { padding: 1em 1em 3em; height: 0; background: yellow; } >+ .nose div div { width: 2em; height: 2em; background: red; margin: auto; } >+ .nose :hover div { border-color: blue; } >+ .nose div:hover :before { border-bottom-color: inherit; } >+ .nose div:hover :after { border-top-color: inherit; } >+ .nose div div:before { display: block; border-style: none solid solid; border-color: red yellow black yellow; border-width: 1em; content: ''; height: 0; } >+ .nose div :after { display: block; border-style: solid solid none; border-color: black yellow red yellow; border-width: 1em; content: ''; height: 0; } >+ >+ /* between lines nine and ten: margin collapsing with 'float' and 'clear' */ >+ .empty { margin: 6.25em; height: 10%; /* computes to auto which makes it empty per 8.3.1:7 (own margins) */ } >+ .empty div { margin: 0 2em -6em 4em; } >+ .smile { margin: 5em 3em; clear: both; /* clearance is negative (see 8.3.1 and 9.5.1) */ } >+ >+ /* line ten and eleven: containing block for abs pos */ >+ .smile div { margin-top: 0.25em; background: black; width: 12em; height: 2em; position: relative; bottom: -1em; } >+ .smile div div { position: absolute; top: 0; right: 1em; width: auto; height: 0; margin: 0; border: yellow solid 1em; } >+ >+ /* smile (over lines ten and eleven): backgrounds behind borders, inheritance of 'float', nested floats, negative heights */ >+ .smile div div span { display: inline; margin: -1em 0 0 0; border: solid 1em transparent; border-style: none solid; float: right; background: black; height: 1em; } >+ .smile div div span em { float: inherit; border-top: solid yellow 1em; border-bottom: solid black 1em; } /* zero-height block; width comes from (zero-height) child. */ >+ .smile div div span em strong { width: 6em; display: block; margin-bottom: -1em; /* should have no effect, since parent has top&bottom borders, so this margin doesn't collapse */ } >+ >+ /* line twelve: line-height */ >+ .chin { margin: -4em 4em 0; width: 8em; line-height: 1em; border-left: solid 1em black; border-right: solid 1em black; background: yellow url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAFSDNYfAAAAaklEQVR42u3XQQrAIAwAQeP%2F%2F6wf8CJBJTK9lnQ7FpHGaOurt1I34nfH9pMMZAZ8BwMGEvvh%2BBsJCAgICLwIOA8EBAQEBAQEBAQEBK79H5RfIQAAAAAAAAAAAAAAAAAAAAAAAAAAAID%2FABMSqAfj%2FsLmvAAAAABJRU5ErkJggg%3D%3D) /* 64x64 red square */ no-repeat fixed /* shouldn't be visible unless the smiley is moved to the top left of the viewport */; } >+ .chin div { display: inline; font: 2px/4px serif; } >+ >+ /* line thirteen: cascade and selector tests */ >+ .parser-container div { color: maroon; border: solid; color: orange; } /* setup */ >+ div.parser-container * { border-color: black; /* overrides (implied) border-color on previous line */ } /* setup */ >+ * div.parser { border-width: 0 2em; /* overrides (implied) declarations on earlier line */ } /* setup */ >+ >+ /* line thirteen continued: parser tests */ >+ .parser { /* comment parsing test -- comment ends before the end of this line, the backslash should have no effect: \*/ } >+ .parser { margin: 0 5em 1em; padding: 0 1em; width: 2em; height: 1em; error: \}; background: yellow; } /* setup with parsing test */ >+ * html .parser { background: gray; } >+ \.parser { padding: 2em; } >+ .parser { m\argin: 2em; }; >+ .parser { height: 3em; } >+ .parser { width: 200; } >+ .parser { border: 5em solid red ! error; } >+ .parser { background: red pink; } >+ >+ /* line fourteen (last line of face): table */ >+ ul { display: table; padding: 0; margin: -1em 7em 0; background: red; } >+ ul li { padding: 0; margin: 0; } >+ ul li.first-part { display: table-cell; height: 1em; width: 1em; background: black; } >+ ul li.second-part { display: table; height: 1em; width: 1em; background: black; } /* anonymous table cell wraps around this */ >+ ul li.third-part { display: table-cell; height: 0.5em; /* gets stretched to fit row */ width: 1em; background: black; } >+ ul li.fourth-part { list-style: none; height: 1em; width: 1em; background: black; } /* anonymous table cell wraps around this */ >+ >+ /* bits that shouldn't appear: inline alignment in cells */ >+ .image-height-test { height: 10px; overflow: hidden; font: 20em serif; } /* only the area between the top of the line box and the top of the image should be visible */ >+ table { margin: 0; border-spacing: 0; } >+ td { padding: 0; } >+ >+ </style> >+ <link rel="appendix stylesheet" href="data:text/css,.picture%20%7B%20background%3A%20none%3B%20%7D"> <!-- this stylesheet should be applied by default --> >+ </head> >+ <body> >+ <div class="intro"> >+ <h1>Standards compliant?</h1> >+ <p><a href="#top">Take The Acid2 Test</a> and compare it to <a >+ href="reference.html">the reference rendering</a>.</p> >+ </div> >+ <h2 id="top">Hello World!</h2> >+ <div class="picture"> >+ <p><table><tr><td></table><p class="bad"> <!-- <table> closes <p> per the HTML4 DTD --> >+ <blockquote class="first one"><address class="second two"></address></blockquote> >+ <div class="forehead"><div> </div></div> >+ <div class="eyes"><div id="eyes-a"><object data="data:application/x-unknown,ERROR"><object data="404.html?pipe=status(404)" type="text/html"><object data="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAYCAYAAAFy7sgCAAAGsUlEQVRo3u2ZbWwcZxHHf3s%2B7LNbO3ZjXBtowprGODRX0qpNQCjmJKuVKhMl1P2AkCwhFOIKkCBSm9IXavGFKAixIAECwkmWo5MrhRI3Ub40IEwQgp6aIDg3Cd6eEqyIHEteah%2B1E69vhw%2BZtTaX8704ZzkKjHS6271nZ56ZZ%2BY%2F%2F%2BdZKF%2FCwYshx3EkkggLsD1v4FQkEZZYLCbAKyG9%2Ba9EIsG6hnUAf8x74K3aUC3j4%2BM54HcsR2oAIomwZOezkv%2FnSHpYNh%2BNCmAE7xv94zvFdd1bHsjMZmQkPSxAJP%2B%2FfuBLwK54PC7JZFKAVJmzXLBt2w%2FMvcDLwIb8QS8CeJ4nkURYIomw7J%2FYJ8BvSiiXptGGxWds2%2Fa9%2Bnaxh%2BYAD%2Bgt04NDgABTpQY2cvvSFLzw86gWeBVwC8SzlOSv2YeBPfmDBoBHgKmR9LBEEmHZfDTqGykqfkUE0nA78BzQGfSgUeP3wNeTXwXg7MwZDhw4UHL6ra2ti79%2FOvljgG8AZ4H64Lhm4MvAocxsRppGG%2FxcXihlwLIs6R%2FfKV2HO%2F26uA94pdDYUKUZUU7W1RQYXA98Gnhaf5%2FXWX0HeAHYoQonqa4sZSOsSWMCWeC9Yko%2BCQwBe4E6oNc0Tc91XTl1%2BaTsn9gnI%2Blhyc5nZWxsrBIkKSbl2tiic3tW53YDEwOKaoFBrcOfqKee53lG9xsPMjV784r%2F4lO%2FpPvyJ9iyZcuvFSaXK5XYeAZ4CDgGvB3MS4B54LQuWYPeuy4iRFsevsXqpuYoqVQKIH2bK1CuDQNo11o4XUzh%2FcDWYIe1LEtyuZx4niee54njOGKapgfsqlL%2Bl2OjEXg8nxrc1dJ0h3hbtL%2BGCtz7KPBF4CuBe9uB15VafE8hr9qylI3HgG8C2%2FK7VyHZoJj7MrBRm30qFotJMpkU27YlHo%2F7Ha5a%2BV%2FKRkSJ4KuKRLVLKapTjB1SzAVIjY2NSXY%2BKyPpYdk%2FsU9OXT4pruv6BdZbBQfKsVGnvWlIe1VB6VQO8JxC1vZYLCbZ%2BaxsPhpdZDyRRFhG0sPiOE6ldKBg2lRg4xF1YCDIIIKN7DGgD3gH%2BBXwejKZfPrs2tPs%2FvPN2bKuYR1nd7xLKBSSJeqoXKnERjPwNWAG%2BLn2rZuM%2B4Tpml6vaWlp4eLcxVusZq5lCgVgOVKJjRqdX86ffL4D5wIoZACnTpw4wRMdT96i%2FImOJxERAs4uVyqxUacF%2FPdiCj%2BjdRBRGFtwXVdG0sPSdbhTmkYbpH98p2RmM2JZlig1vl0GWo4NQ%2Fn%2Bs5pKRXfwjweaxy7TND3HcRZbfC6X8xVPVQlGy7WxVWlO5XRXFXm6EZmrQuSXYyPE3SiVoEhE6Wyr0u2rumO6zv%2B21AFdQAswC1wCMuUCXCmyWQus103Qg8qlDO0lxwOb%2Fl4FiK3AB3VS%2FuKKLtK%2FgbeAnwG%2FvUODuRw%2FFrR0H1UC75fwu8oJ%2FhFsW5VIG%2FBUgEIN6Y65O4AHu4Ap0zQ9y7LEcZyb9lRBUHQcRyzL8unZVBW5bFWAvAp%2BhDQ2g4F47dUYtlU6obXA54DnVdFLekjUGGifh4AFy7LEdV3xj3X9I66m0QZpGm2QrsOd0j%2B%2BU0bSw5KZzYjrun6HWlAd961i4FfCj0aN1Usau%2Bc1lmuXPFwvAEumUut7tQQvAb%2FXb%2FT0bCAej9cODg7yt%2Bm%2F8q2%2F7OUHZ76PnZ1k2p0mJzlykmPancbOTnL0whHs7CQfb%2B5mx2d3sH79%2BtCRI0c6FeaOr9ICrIQfLvA%2B8BGNXxi4R6HrisJVUWrxAVW2oMFf0Aczim8o3kV6enowDIPjF9%2Fk%2BMU3S3rrjzMMg56eHr%2BxP7qKFbASfojG6kpeDGs1tiW53RxwWT%2Bin5q8w4xpQK5evQpAR30H7ZH2khNvj7TTUd8BgD4rqmu1ZKX8qNeY%2BfHz4zlXDgT5E8tpCTUq7XSBC4Euv8227TV9fX1E73%2BYtvo27BmbS9cvFVTY3bSRFza9yOcf6Gfmygy7d%2B%2Fm%2FPnzF4DvrsBLhnJlJfwIKXxv1PheAE4qK6p4H9AGbNKTuhngBPBPXYRe4IemaT5kWZbR19fHNbmGnZ1k4r3U4glDR30Hm5qjbGjsImJEOHbsGHv27JFz5869o0eFq01Jq%2BmHAXwI6FFKagMTgHM7GzFDS%2BoeLSMv7zjzC9x4Y7gxFovVDAwMEI1GaWlpWSzRVCrFwYMH%2FXfxZ4AfAa8B%2F7lDaGg1%2FQgp43lfK0yqtRMuJa3ceKe5DfgYsCYAZ2ngD8CfAkzqTpW7xY%2F%2FSznyX%2FVeUb2kVmX4AAAAAElFTkSuQmCC">ERROR</object></object></object></div><div id="eyes-b"></div><div id="eyes-c"></div></div> <!-- that's a PNG with 8bit alpha containing two eyes --> >+ <div class="nose"><div><div></div></div></div> >+ <div class="empty"><div></div></div> >+ <div class="smile"><div><div><span><em><strong></strong></em></span></div></div></div> >+ <div class="chin"><div> </div></div> >+ <div class="parser-container"><div class="parser"><!-- ->ERROR<!- --></div></div> <!-- two dashes is what delimits a comment, so the text "->ERROR<!-" earlier on this line is actually part of a comment --> >+ <ul> >+ <li class="first-part"></li> >+ <li class="second-part"></li> >+ <li class="third-part"></li> >+ <li class="fourth-part"></li> >+ </ul> >+ <div class="image-height-test"><table><tr><td><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAFSDNYfAAAAaklEQVR42u3XQQrAIAwAQeP%2F%2F6wf8CJBJTK9lnQ7FpHGaOurt1I34nfH9pMMZAZ8BwMGEvvh%2BBsJCAgICLwIOA8EBAQEBAQEBAQEBK79H5RfIQAAAAAAAAAAAAAAAAAAAAAAAAAAAID%2FABMSqAfj%2FsLmvAAAAABJRU5ErkJggg%3D%3D" alt=""></td></tr></table></div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..66c239ccb7c2e38aca82c4350c62655a19a48160 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/w3c-import.log >@@ -0,0 +1,21 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/404.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reference.png >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/reftest.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid2/test.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css >new file mode 100644 >index 0000000000000000000000000000000000000000..d490c124219f46142975e935189b726b51c3fe2d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css >@@ -0,0 +1,8 @@ >+<!DOCTYPE HTML><html><head><title>FAIL</title><style> >+<!-- this file is sent as text/html, not text/css, which is why it is >+ called "empty.css" despite the following lines --> >+ >+ body { background: white; color: black; } >+ h1 { color: red; } >+ >+</style><body><h1>FAIL</h1></body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..156209f9c81ff73b6aaf1a0734ef770ddf0a8e3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css.headers >@@ -0,0 +1 @@ >+Content-Type: text/html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0b91841acfcbf74e4f10707731486ff3e9754e54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.html >@@ -0,0 +1 @@ >+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><title></title></head><body></body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.png b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.png >new file mode 100644 >index 0000000000000000000000000000000000000000..fd5b91ea07b947391714085ea9c763d3a7868d68 >GIT binary patch >literal 260 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CSbBp9sfW`_bPrjj7PV1@&4zw>v1cuC&wE({E- >zdX<fUJkA1-$YLPv0mg18v+aP4mJ-*9l91Hm5(XPZ7k}rF$N*P`jFQ|OI~ypOnwVl| >zQ<7PdlWOPY=;>pl4`JKrXMkmr@>449Yzm-q1$H*Y$wiq3C3XdgMX7ludU^RJnQ4_8 >zN~yU8C6#&wdFe`;Hu_K{Hu@0F`e2*7e#HI*x`)ft#W95Ada?zOeTd=Uj|=|7Ko*0i >LtDnm{r-UW|%f3qN > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.txt b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..452a7e6d753d41df960bab59fdc8c72008bf9698 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.txt >@@ -0,0 +1 @@ >+<!DOCTYPE html><html><head><title>FAIL</title></head><body><p>FAIL</p><script>parent.notify("empty.txt")</script></body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e6a125cc0d575e74c47f84c7128352e83c3a932c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml >@@ -0,0 +1,4 @@ >+<root> >+ <fail> This is an invalid byte in UTF-8: ¿ </fail> >+ <test/> <!-- shouldn't ever be parsed, as the parser should abort at the first sign of non-well-formedness --> >+</root> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..9395ed9a2857bcebf3e888bf22876337af40b89c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml.headers >@@ -0,0 +1 @@ >+Content-Type: application/xml;charset=utf-8 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico >new file mode 100644 >index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..afa04c171df258a598d599d2eeccd523c096f3de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico.headers >@@ -0,0 +1 @@ >+Content-Type: image/x-icon >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/numbered-tests.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/numbered-tests.html >new file mode 100644 >index 0000000000000000000000000000000000000000..42d3324c69edc97c1ee455fd3b0533de32cc2f0e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/numbered-tests.html >@@ -0,0 +1,28 @@ >+<!doctype html> >+<title>Acid3 numbered tests</title> >+<meta name="timeout" content="long"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+var tests = undefined; >+ >+function gotMessage(e) { >+ var m = e.data; >+ if (tests === undefined && "num_tests" in m) { >+ tests = []; >+ for (var i = 0; i < m.num_tests; i++) { >+ tests.push(async_test("Test " + i)); >+ } >+ } else if ("result" in m) { >+ var test = m.test; >+ var passed = m.result === "pass"; >+ var message = m.message; >+ tests[test].step(function() { >+ assert_true(passed, message); >+ }); >+ tests[test].done(); >+ } >+} >+window.addEventListener("message", gotMessage, false); >+</script> >+<iframe src="test.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/reference.png b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/reference.png >new file mode 100644 >index 0000000000000000000000000000000000000000..22cd4cae0837ad174b0d08070ce7fa01d9d3a748 >GIT binary patch >literal 1771 >zcmeAS@N?(olHy`uVBq!ia0y~yV4BImz<7*<2`IARFZ(VA2DVL}E{-7;x8B}$^gC=I >z;1I}v>R?TOoZ9q<a{Ff94CCnX5VoGYXS<WfU7v|{uTJ@FxyHpX;aa;OL&G#?hA2LU >z3`-DN@D#>}2toJ=B_C3LzUR(byNr!Nc<Z%$S(TbgzvuNa7`VFB{O&a_V>sb^no(i< >zQ4R)$>CfMv&R%Obo!KD|XcF8og!#nTM}(7rMq)P=;cA>pKn{bu4X7TWWyo6mQ^$>= >zKvgi2WA@j3TV)!4UfU#fXzjCSJ+cf%mx~xK6froQW@ON12ca!8P(D-$!UrmO(DTNI >z_1Wg4-&>b>Z@pObpzNSg(|x(po`&mlHj)rVZ_b_zwwSQ>j#z&4w8N}fWzW+k^X+>c >z0G)!<W`s*1N)qzR<`pf-&VRpcru2oPyoamya?jq`c)8#hQoLc0eMHo5Ft_$kKeg}P >zZKiw%-Q{1-Z{b(se=m1H(;^uu6c7Oev>5I@L_pn${xx^`^LWO*ljaOj|H5_7|5@?S >zpGP83ceNrgsbt#Uv*6w%e}6hg=p68Pw}ess;eA73(#qT^#QPqb)0KBlW@9hTmby@M >z;`G+c1cvlCNJ$!!J`E;WXUb^bS;uyv=u^>dDV%C1A3e;&aN*OInEh-IYR}zZ#0bzO >z+IKuRD@Zfw`kxWaWym`xX^qJDh~!UPjv*BC5P2M?V$XM@7Gp1YNDXT2rU0V?M{EGq >z!?h5h1d+SY;}~Mf0iM%s*Iil;GCEwFw*6Y&A4!H8hu|sgfZ0Rqd<KuV+;Yt>qTWfl >R<-kge!PC{xWt~$(6980{JBa`Q > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-a.png b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-a.png >new file mode 100644 >index 0000000000000000000000000000000000000000..9f240083debc76f67f33bc4e15c0318e5e031a35 >GIT binary patch >literal 2312 >zcmc(h`#;l*AICo|%+NMjh=YaZvW6p)a+^7B$t+4Pu`neLD%vr*^>Hc6rHgAJcS2cm >zIaubBTc|@$l$lT_xec2$I?ki-|M30c{eC@OugCNE*XtJXl(iJ>01N;CDO(!?X;&Zq >zcTnNoPxqOt-xZ;&Bx^iSGpIPfYxekCI9LF{^Hd1|S!CC%_}Gvf03hNJ0K|X*u(cb- >zd<B3oT>#*C1AuWB0LX^qH9MUE0BC|O!NQq(eldrAS6v$lZnp8;_>=eYihbPTwanw? >zF>Cvf97r){jm0qAENc{21~(gC2xofzA<~B-Hpk-Q7|?!gqG@az9=AAi5L;``-(z=_ >zXtOL!{*OSAdP*L7fU_u#eDirxnE1|50uO6?aWDB<i}36|jZfz2cCVj=4LURY3i9FE >zf=J;K1r0UcPXemxJKW2<|HJ<p@(C=G=Lwd((jOaXOmA{-3PG<jwY81n1Qan;AYZ-M >z6~eYBL|aTLMMQn*z9a;S<$Cul9h|v6SCB-nqQ4=XB1Z0ju1YdaZN{js7N`rdT}yAk >zWSx^ttj$FrX@$u7_A03dLhltXmsa&ga3?+=9K5C&72CoSH>3hPzS~Og(4DgiFP&*E >zE@JG>=hr8{e<3fYNsuSx8*?1TV+H1UqFo)SYIt5wAQlg2?BEdO1X(=^CK|}QV8jTn >zjS&Km?w{2aVafv@oqunaL=*fT-k)Z7o59e3GEN-7%Sd3hPwgF2m6=J-p<GGr6N;g8 >zr;4a@Z2N+9^A*N01MNr}SN&IR(WGgMaIk9GtfP64-LO{8Ah2vg@qxZDyM+j}_#>}R >zdectc&CW!+r(=pE$7Gjf8N*!+5=B$pJ3`k@_J?ag;2r5$X!@`eFmBZy=}|z<V_{<S >zp%uu!sFG|aak0eD#t?=KG<|37Bopyu_50R>A<0*qi`_&IP#nV?7qAR{Pb0zb8Cob( >z?qju^O8_icGMo`_#TSoO=7o7)v~m4(WBJsUYsAB%4<F9b<gaj#eEp8|_31KGMyAmx >z(&>kz*vD7{O9Spnrxmp>?+7xNtTg&)^K0x_jNFCn1_}Qh9NtK<y5LW(-1)~Y6ksn{ >zTu97q${xwcR9NYv@^)e?D$<Ffe<G)C>pXeuSnsSGs2GV;3n$==YEPTiwE)WjLNQ_k >z?eu!IEIr^5eWesv%&Qp6i1lJ^(>*iC3&FCtDWFLs1l{jwWi+w0GKnfZa#t6^_~quv >zE4W2@TO|Du<dG^>Nr9~D<KE}ZcqtJikksnm9t)@r=k%L<X8A!N(i=T^kP@|ks1(fT >zBwBkE|JWMK^n;Ao;*Dm?D3h1>yv$^!xarJtxFfivY6JJU;ojhA+3Cgg&hW@6Q=v{( >z?%INaaA2LrM#33tSKx-Xkz9)I?R=?(MVUrM`SkP<;hU(!E#0*ICS-dQs!hVh*%E>= >z8(NdU^=#-(wyVuqHZf><T*XUiq(p|l<y_>JG(1#$M+rlwJ3q+S%zXTC+!ZY_b*jcw >z`QnG=*0-Xn0>tt4Kt)DF7%J*EjAA6W#ph3B_V~2j*tCw<C+3Oy$xDx>c_oKvngz>} >z;4w`Gnpy?V_dVXinf5)M`+~PY7p6RNAGjKMGjfgyx!l9sPnx)$oxkOTme8}5(@-Yi >zp7+};w}_xo_Yzq!u#8vTIM$d>Dp{P#lwyB7ZgC@KY^8{W*E(ay2mzHe6NAOnlfHzr >zv3fS6Av8$zFsFox8hQ0P--W-uRyGh}j;ti@mHPW)1a191q7aio)-2}_meyc0*yo^y >zm7kl}JzEc0e06e=GM9Vyn6^UiM;e#OKbg{X=g|F2Wv|d!L1=sP^I!tk{Fl+*gyhwF >z!uLlGQ5(2alaY9DQ=7qr(j$!qGJW<0KB?)l$q7k+Cy+|cLFLc?9)2+mVylm0IO;0m >z)hy}L+ZJEKSZp$I>0<lNe7$E-()$edRR@*ouo?}gG+oM)SO38Bd1C0xZX7s>v*4~y >z#JuC_tkM9>8`&Z%9u41kRu-k_dJZS&sSte-6s77qSaLD^y0$O!)^a^5q3o@h?i6Zu >zuekBCi-*pV)$p9Z`YNF7l5q79(PxW|#`ed+iRtdK2sJfwBH^y`3nzXkD_%_hQmrAk >zIRxa)y@9C+pkQuMzNh~}*~ZA{V{5Pk>^n!nu!=)Je5vsL6&o4lPnH|ruVa+G8;_Pt >z+*^ZK$-g(q9ZxYSX*9NR4Yrf5vn6d5Yz5fyN_0f2`y^QU0n{ofHL&r>ef8t75#q~$ >z<V4z(z`!}3*b!6;4RuNzE%G{8zL)sdhV{Z`foM|?;O3uqeTXMQ;zE*Er$+ihB9Ac< >zQFZ&49qz<|JiRns<#Wl)xr@3+grt134+Wy+krdLcgUK?fmLwGp>_3PdiTswKNQ#%i >zv{RLt<nfW;ieUb0hNrDtaUWlahKb=hRUJ<yCT*XR=F-Y<20Ev1Yk>jW#_7tc58b}| >zOU#lwr=G8X2T~9xeR_skh}2c<!I!olDD_wg>5kO~gxc6rc?aCIGgm)IKpk2-mfTq} >zK9xRzg)|fIkhYtNvasmKhHzm<rX>-~%syN>rm2JXB}lR=$v@tRK7Ex%BA+>Fi3tD$ >zX3^8c75E)b=o@q;hbl>#xYJkL>MRA^k2-{;D(cZyWq7@^r%83&>9>`IUj_RRzG~KF >z_tpA2{&KptU1w$!*&Y|tm8-~fq+W}^;H77_-5O6TK>lVT-Jz7>|1_k&g&QX@rEt<- >zKlnuHMSElxa`>ycqk9rVoc#Qz8Z_#qem|{3Fm&ZSS{vyUed|-(b9dO#EIlV_bfutS >z1bTM)pYK>P6r5ok{A)5VUYq)n91hZhQ$I6j#Z`2eCl08m{;#7m8hR3zam-cNeMfK0 >jYz$-iXEFc3;vKOX?4>xa?bR2%Qw6ZKIz_0#d&m6?Td7c@ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png >new file mode 100644 >index 0000000000000000000000000000000000000000..752ee7ec05c462af34db027e5ef9cd80cd1ce0aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png >@@ -0,0 +1 @@ >+<!DOCTYPE html><html><head><title>FAIL</title><style> * { background: transparent; } </style></head><body><p><!-- this file is transparent --></p></body></html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..844a971169c4b50126e6d41a421f083add94697c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png.headers >@@ -0,0 +1,2 @@ >+Content-Type: text/html >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f5b1ffad147de5b97188101d446e4a0ffa797305 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml >@@ -0,0 +1 @@ >+<?xml-stylesheet href="data:text/css,text%7Bfont-family%3AACID3svgfont%7D"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100"><defs><font-face font-family="ACID3svgfont"><font-face-src><font-face-uri xlink:href="font.svg#mini"/></font-face-src></font-face><path id="path" d="M0 0l0 42l16 16l4711 0"/></defs><text>X</text></svg> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..070de35fbe96585b9cf1b7da4ce8e4ff08a8f3ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml.headers >@@ -0,0 +1 @@ >+Content-Type: image/svg+xml >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test-expected.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..974bee11e4d010853dba9b7c097e91615ad682f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test-expected.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> >+<html> >+ <title>The Acid3 Test (Reference Rendering)</title> >+ <link rel="icon" href="http://nonexistent.{{host}}"> >+ <style type="text/css"> >+ html { margin: 0; padding: 0; } >+ body { background: #c0c0c0 url(reference.png) top left no-repeat; margin: 0; padding: 0; } >+ #a { font: bold 100px/120px Arial, sans-serif; position: absolute; top: 57px; left: 57px; color: #000000; z-index: 1; } >+ #a0 { font: bold 100px/120px Arial, sans-serif; position: absolute; top: 60px; left: 60px; color: #C0C0C0; z-index: 0; } >+ #b { position: absolute; top: 230px; left: 625px; width: 0; white-space: pre; } >+ #b div { font: bold 100px/120px Arial, sans-serif; position: absolute; right: 0; text-align: right; color: #000000; } >+ #c { font: 16px/19.2px Arial, sans-serif; color: #808080; width: 562px; position: absolute; top: 350px; left: 57px; } >+ #c a { color: #0000FF; } >+ </style> >+ <body> >+ <div id="a">Acid3</div> >+ <div id="a0">Acid3</div> >+ <div id="b"><div>100/100</div></div> >+ <div id="c">To pass the test,<span></span> a browser must use its default settings, the animation has to be smooth, the score has to end on 100/100, and the final page has to look exactly, pixel for pixel, like <a href="reference.sub.html">this reference rendering</a>.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test.html b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0c475309cf57fd67d5710f7a39d6c9efc251f378 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test.html >@@ -0,0 +1,3513 @@ >+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> >+<html class="reftest-wait"> >+ <title>The Acid3 Test</title> >+ <link rel="match" href="reference.sub.html"> >+ <script type="text/javascript"> >+ var startTime = new Date(); >+ </script> >+ <style type="text/css"> >+ >+ /* set some basic styles so that we can get reliably exact results */ >+ * { margin: 0; border: 1px blue; padding: 0; border-spacing: 0; font: inherit; line-height: 1.2; color: inherit; background: transparent; } >+ :link, :visited { color: blue; } >+ >+ /* header and general layout */ >+ html { font: 20px Arial, sans-serif; border: 2cm solid gray; width: 32em; margin: 1em; } >+ :root { background: silver; color: black; border-width: 0 0.2em 0.2em 0; } /* left and top content edges: 1*20px = 20px */ >+ body { padding: 2em 2em 0; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAABGdBTUEAAK%2FINwWK6QAAAAlwSFlzAAAASAAAAEgARslrPgAAABtJREFUOMtj%2FM9APmCiQO%2Bo5lHNo5pHNVNBMwAinAEnIWw89gAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII%3D) no-repeat 99.8392283% 1px white; border: solid 1px black; margin: -0.2em 0 0 -0.2em; } /* left and top content edges: 20px-0.2*20px+1px+2*20px = 57px */ >+ h1:first-child { cursor: help; font-size: 5em; font-weight: bolder; margin-bottom: -0.4em; text-shadow: rgba(192, 192, 192, 1.0) 3px 3px; } /* (left:57px, top:57px) */ >+ #result { font-weight: bolder; width: 5.68em; text-align: right; } >+ #result { font-size: 5em; margin: -2.19em 0 0; } /* (right:57px+5.2*5*20px = 577px, top:57px+1.2*5*20px-0.4*5*20px+1px+1*40px+1*40px+1px+2*40px+150px-2.19*5*20px = 230px) */ >+ .hidden { visibility: hidden; } >+ #slash { color: red; color: hsla(0, 0%, 0%, 1.0); } >+ #instructions { margin-top: 0; font-size: 0.8em; color: gray; color: -acid3-bogus; height: 6.125em; } /* (left:57px, top:230px+1.2*5*20+0 = 350px) */ >+ #instructions { margin-right: -20px; padding-right: 20px; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAABGdBTUEAAK%2FINwWK6QAAAAlwSFlzAAAASAAAAEgARslrPgAAABtJREFUOMtj%2FM9APmCiQO%2Bo5lHNo5pHNVNBMwAinAEnIWw89gAAACJ6VFh0U29mdHdhcmUAAHjac0zJT0pV8MxNTE8NSk1MqQQAL5wF1K4MqU0AAAAASUVORK5CYII%3D) no-repeat top right; } >+ #instructions span { float: right; width: 20px; margin-right: -20px; background: white; height: 20px; } >+ @font-face { font-family: "AcidAhemTest"; src: url(/fonts/Ahem.ttf); } >+ map::after { position: absolute; top: 18px; left: 638px; content: "X"; background: fuchsia; color: white; font: 20px/1 AcidAhemTest; } >+ iframe { float: left; height: 0; width: 0; } /* hide iframes but don't make them display: none */ >+ object { position: fixed; left: 130.5px; top: 84.3px; background: transparent; } /* show objects if they have content */ >+ .removed { position: absolute; top: 80px; left: 380px; height: 100px; width: 100px; opacity: 0; } >+ >+ /* set the line height of the line of coloured boxes so we can add them without the layout changing height */ >+ .buckets { font: 0/0 Arial, sans-serif; } >+ .buckets { padding: 0 0 150px 3px; } >+ >+ /* the next two rules give the six coloured blocks their default styles (they match the same elements); the third hides them */ >+ :first-child + * .buckets p { display: inline-block; vertical-align: 2em; border: 2em dotted red; padding: 1.0em 0 1.0em 2em; } >+ * + * > * > p { margin: 0; border: 1px solid ! important; } >+ .z { visibility: hidden; } /* only matches the buckets with no score */ >+ >+ /* sizes for the six buckets */ >+ #bucket1 { font-size: 20px; margin-left: 0.2em; padding-left: 1.3em; padding-right: 1.3em; margin-right: 0.0001px; } >+ #bucket2 { font-size: 24px; margin-left: 0.375em; padding-left: 30px; padding-right: 32px; margin-right: 2px; } >+ #bucket3 { font-size: 28px; margin-left: 8.9999px; padding-left: 17px; padding-right: 55px; margin-right: 12px; } >+ #bucket4 { font-size: 32px; margin-left: 0; padding-left: 84px; padding-right: 0; margin-right: 0; } >+ #bucket5 { font-size: 36px; margin-left: 13px; padding-left: 0; padding-right: 94px; margin-right: 25px; } >+ #bucket6 { font-size: 40px; margin-left: -10px; padding-left: 104px; padding-right: -10px; } >+ >+ /* colours for them */ >+ .z, .zP, .zPP, .zPPP, .zPPPP, .zPPPPP { background: black; } >+ .zPPPPPP, .zPPPPPPP, .zPPPPPPPP, .zPPPPPPPP, .zPPPPPPPPP, >+ .zPPPPPPPPPP { background: grey; } >+ .zPPPPPPPPPPP, .zPPPPPPPPPPPP, .zPPPPPPPPPPPPP, >+ .zPPPPPPPPPPPPPP, .zPPPPPPPPPPPPPPP { background: silver; } >+ #bucket1.zPPPPPPPPPPPPPPPP { background: red; } >+ #bucket2.zPPPPPPPPPPPPPPPP { background: orange; } >+ #bucket3.zPPPPPPPPPPPPPPPP { background: yellow; } >+ #bucket4.zPPPPPPPPPPPPPPPP { background: lime; } >+ #bucket5.zPPPPPPPPPPPPPPPP { background: blue; } >+ #bucket6.zPPPPPPPPPPPPPPPP { background: purple; } >+ >+ /* The line-height for the .bucket div is worked out as follows: >+ * >+ * The div.bucket element has a line box with a few >+ * inline-blocks. Each inline-block consists of: >+ * >+ * 2.0em vertical-align from baseline to bottom of inline-block >+ * 1px bottom border >+ * 1.0em bottom padding >+ * 1.0em top padding >+ * 1px top border >+ * >+ * The biggest inline-block has font-size: 40px. >+ * >+ * Thus the distance from the baseline to the top of the biggest >+ * inline-block is (2em+1em+1em)*2em*20px+2px = 162px. >+ * >+ * The line box itself has no other contents, and its strut has zero >+ * height and there is no half-leading, so the height of the >+ * div.bucket is 162px. >+ * >+ * (Why use line-height:0 and font-size:0? Well: >+ * >+ * The div.bucket line box would have a height that is the maximum >+ * of the following two sums: >+ * >+ * 1: half-leading + font descent at 1em + font ascent at 1em + half-leading >+ * 2: half-leading + font descent at 1em + 162px >+ * >+ * Now the half-leading is (line-height - (font-ascent + font-descent))/2, so that is really: >+ * >+ * 1: (line-height - (font-ascent + font-descent))/2 + font descent + font ascent + (line-height - (font-ascent + font-descent))/2 >+ * 2: (line-height - (font-ascent + font-descent))/2 + font descent + 162px >+ * >+ * Which simplify to: >+ * >+ * 1: line-height >+ * 2: line-height/2 + (font descent - font-ascent)/2 + 162px >+ * >+ * So if the following expression is true: >+ * >+ * line-height > line-height/2 + (font descent - font-ascent)/2 + 162px >+ * >+ * That is, if this is true: >+ * >+ * line-height > font descent - font-ascent + 324px >+ * >+ * ...then the line-height matters, otherwise the font does. Note >+ * that font descent - font-ascent will be in the region of >+ * 10px-30px (with Ahem, exactly 12px). However, if we make the >+ * line-height big, then the _positioning_ of the inline-blocks will >+ * depend on the font descent, since that is what will decide the >+ * distance from the bottom of the line box to the baseline of the >+ * block (since the baseline is set by the strut). >+ * >+ * However, in Acid2 a dependency on the font metrics was introduced >+ * and this caused all kinds of problems. And we can't require Ahem >+ * in the Acid tests, since it's unlikely most people will have it >+ * installed. >+ * >+ * What we want is for the font to not matter, and the baseline to >+ * be as high as possible. We can do that by saying that the font >+ * and the line-height are zero. >+ * >+ * One word of warning. If your browser has a minimum font size feature >+ * that forces font sizes up even when there is no text, you will need >+ * to disable it before running this test. >+ * >+ */ >+ >+ /* rules specific to the tests below */ >+ #instructions:last-child { white-space: pre-wrap; white-space: x-bogus; } >+ /* replaced for http://dbaron.org/mozilla/visited-privacy with the three rules after it: >+ #linktest:link { display: block; color: red; text-align: center; text-decoration: none; } >+ #linktest.pending, #linktest:visited { display: none; } */ >+ #linktest { position: absolute; left: 17px; top: 18px; color: red; width: 80px; text-decoration: none; font: 900 small-caps 10px sans-serif; } >+ #linktest:link { color: red; } >+ #linktest.pending, #linktest:visited { color: white; } >+ #\ { color: transparent; color: hsla(0, 0, 0, 1); position: fixed; top: 10px; left: 10px; font: 40px Arial, sans-serif; } >+ #\ #result, #\ #score { position: fixed; top: 10%; left: 10%; width: 4em; z-index: 1; color: yellow; font-size: 50px; background: fuchsia; border: solid 1em purple; } >+ </style> >+ >+ <!-- part of the HTTP tests --> >+ <link rel="stylesheet" href="empty.css"><!-- text/html file (should be ignored, <h1> will go red if it isn't) --> >+ >+ <!-- the next five script blocks are part of one of the tests --> >+ <script type="text/javascript"> >+ var d1 = "fail"; >+ var d2 = "fail"; >+ var d3 = "fail"; >+ var d4 = "fail"; >+ var d5 = "fail"; >+ </script> >+ <script type="text/javascript" src="data:text/javascript,d1%20%3D%20'one'%3B"></script> >+ <script type="text/javascript" src="data:text/javascript;base64,ZDIgPSAndHdvJzs%3D"></script> >+ <script type="text/javascript" src="data:text/javascript;base64,%5a%44%4d%67%50%53%41%6e%64%47%68%79%5a%57%55%6e%4f%77%3D%3D"></script> >+ <script type="text/javascript" src="data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20"></script> >+ <script type="text/javascript" src="data:text/javascript,d5%20%3D%20'five%5Cu0027s'%3B"></script> >+ >+ <!-- part of the JS regexp and \0 value tests test --> >+ <script type="text/javascript"> >+ var nullInRegexpArgumentResult = 0 < /script/.test('\0script') ? "passed" : "failed"; >+ </script> >+ >+ <!-- main test body --> >+ <script type="text/javascript"> >+ var notifications = {}; >+ function notify(file) { >+ // used in cross-file tests >+ notifications[file] = 1; >+ } >+ function fail(message) { >+ throw { message: message }; >+ } >+ function assert(condition, message) { >+ if (!condition) >+ fail(message); >+ } >+ function assertEquals(expression, value, message) { >+ if (expression != value) { >+ expression = (""+expression).replace(/[\r\n]+/g, "\\n"); >+ value = (""+value).replace(/\r?\n/g, "\\n"); >+ fail("expected '" + value + "' but got '" + expression + "' - " + message); >+ } >+ } >+ function getTestDocument() { >+ var iframe = document.getElementById("selectors"); >+ var doc = iframe.contentDocument; >+ for (var i = doc.documentElement.childNodes.length-1; i >= 0; i -= 1) >+ doc.documentElement.removeChild(doc.documentElement.childNodes[i]); >+ doc.documentElement.appendChild(doc.createElement('head')); >+ doc.documentElement.firstChild.appendChild(doc.createElement('title')); >+ doc.documentElement.appendChild(doc.createElement('body')); >+ return doc; >+ } >+ function selectorTest(tester) { >+ var doc = getTestDocument(); >+ var style = doc.createElement('style'); >+ style.appendChild(doc.createTextNode("* { z-index: 0; position: absolute; }\n")); >+ doc.documentElement.firstChild.appendChild(style); >+ var ruleCount = 0; >+ tester(doc, function (selector) { >+ ruleCount += 1; >+ style.appendChild(doc.createTextNode(selector + " { z-index: " + ruleCount + "; }\n")); >+ return ruleCount; >+ }, function(node, rule, message) { >+ var value = doc.defaultView.getComputedStyle(node, "").zIndex; >+ assert(value != 'auto', "underlying problems prevent this test from running properly"); >+ assertEquals(value, rule, message); >+ }); >+ } >+ var kungFuDeathGrip = null; // used to hold things from test to test >+ var tests = [ >+ >+ // there are 6 buckets with 16 tests each, plus four special tests (0, 97, 98, and 99). >+ >+ // Remove the "JS required" message and the <script> element in the <body> >+ function () { >+ // test 0: whether removing an element that is the last child correctly recomputes styles for the new last child >+ // also tests support for getComputedStyle, :last-child, pre-wrap, removing a <script> element >+ // removing script: >+ var scripts = document.getElementsByTagName('script'); >+ document.body.removeChild(scripts[scripts.length-1]); >+ // removing last child: >+ var last = document.getElementById('remove-last-child-test'); >+ var penultimate = last.previousSibling; // this should be the whitespace node >+ penultimate = penultimate.previousSibling; // this should now be the actual penultimate element >+ last.parentNode.removeChild(last); >+ assertEquals(document.defaultView.getComputedStyle(penultimate, '').whiteSpace, 'pre-wrap', "found unexpected computed style"); >+ return 7; >+ }, >+ >+ // bucket 1: DOM Traversal, DOM Range, HTTP >+ // DOM Traversal >+ function () { >+ // test 1: NodeFilters and Exceptions >+ var doc = getTestDocument(); // looks like <!DOCTYPE><html><head><title/><\head><body/><\html> (the '\'s are to avoid validation errors) >+ var iteration = 0; >+ var exception = "Roses"; >+ var test = function(node) { >+ iteration += 1; >+ switch (iteration) { >+ case 1: case 3: case 4: case 6: case 7: case 8: case 9: case 14: case 15: throw exception; >+ case 2: case 5: case 10: case 11: case 12: case 13: return true; // ToNumber(true) => 1 >+ default: throw 0; >+ }; >+ }; >+ var check = function(o, method) { >+ var ok = false; >+ try { >+ o[method](); >+ } catch (e) { >+ if (e === exception) >+ ok = true; >+ } >+ assert(ok, "method " + o + "." + method + "() didn't forward exception"); >+ }; >+ var i = doc.createNodeIterator(doc.documentElement, 0xFFFFFFFF, test, true); >+ check(i, "nextNode"); // 1 >+ assertEquals(i.nextNode(), doc.documentElement, "i.nextNode() didn't return the right node"); // 2 >+ check(i, "previousNode"); // 3 >+ var w = document.createTreeWalker(doc.documentElement, 0xFFFFFFFF, test, true); >+ check(w, "nextNode"); // 4 >+ assertEquals(w.nextNode(), doc.documentElement.firstChild, "w.nextNode() didn't return the right node"); // 5 >+ check(w, "previousNode"); // 6 >+ check(w, "firstChild"); // 7 >+ check(w, "lastChild"); // 8 >+ check(w, "nextSibling"); // 9 >+ assertEquals(iteration, 9, "iterations went wrong"); >+ assertEquals(w.previousSibling(), null, "w.previousSibling() didn't return the right node"); // doesn't call filter >+ assertEquals(iteration, 9, "filter called incorrectly for previousSibling()"); >+ assertEquals(w.lastChild(), doc.getElementsByTagName('title')[0], "w.lastChild() didn't return the right node"); // 10 >+ assertEquals(w.nextSibling(), null, "w.nextSibling() didn't return the right node"); // 11 (filter called on parent, to see if it's included, otherwise it could skip that and find a nextsibling elsewhere) >+ assertEquals(iteration, 11, "filter called incorrectly for nextSibling()"); >+ assertEquals(w.parentNode(), doc.documentElement.firstChild, "w.parentNode() didn't return the right node"); // 12 >+ assertEquals(w.nextSibling(), doc.documentElement.lastChild, "w.nextSibling() didn't return the right node"); // 13 >+ check(w, "previousSibling"); // 14 >+ check(w, "parentNode"); // 15 >+ return 1; >+ }, >+ function () { >+ // test 2: Removing nodes during iteration >+ var count = 0; >+ var expect = function(n, node1, node2) { >+ count += 1; >+ assert(n == count, "reached expectation " + n + " when expecting expectation " + count); >+ assertEquals(node1, node2, "expectation " + count + " failed"); >+ }; >+ var doc = getTestDocument(); >+ var t1 = doc.body.appendChild(doc.createElement('t1')); >+ var t2 = doc.body.appendChild(doc.createElement('t2')); >+ var t3 = doc.body.appendChild(doc.createElement('t3')); >+ var t4 = doc.body.appendChild(doc.createElement('t4')); >+ var callCount = 0; >+ var filterFunctions = [ >+ function (node) { expect(1, node, doc.body); return true; }, // filter 0 >+ function (node) { expect(3, node, t1); return true; }, // filter 1 >+ function (node) { expect(5, node, t2); return true; }, // filter 2 >+ function (node) { expect(7, node, t3); doc.body.removeChild(t4); return true; }, // filter 3 >+ function (node) { expect(9, node, t4); return true; }, // filter 4 >+ function (node) { expect(11, node, t4); doc.body.removeChild(t4); return 2 /* REJECT */; }, // filter 5 >+ function (node) { expect(12, node, t3); return true; }, // filter 6 >+ function (node) { expect(14, node, t2); doc.body.removeChild(t2); return true; }, // filter 7 >+ function (node) { expect(16, node, t1); return true; }, // filter 8 >+ ]; >+ var i = doc.createNodeIterator(doc.documentElement.lastChild, 0xFFFFFFFF, function (node) { return filterFunctions[callCount++](node); }, true); >+ // * B 1 2 3 4 >+ expect(2, i.nextNode(), doc.body); // filter 0 >+ // [B] * 1 2 3 4 >+ expect(4, i.nextNode(), t1); // filter 1 >+ // B [1] * 2 3 4 >+ expect(6, i.nextNode(), t2); // filter 2 >+ // B 1 [2] * 3 4 >+ expect(8, i.nextNode(), t3); // filter 3 >+ // B 1 2 [3] * >+ doc.body.appendChild(t4); >+ // B 1 2 [3] * 4 >+ expect(10, i.nextNode(), t4); // filter 4 >+ // B 1 2 3 [4] * >+ expect(13, i.previousNode(), t3); // filters 5, 6 >+ // B 1 2 3 * (4) // filter 5 >+ // B 1 2 [3] * // between 5 and 6 >+ // B 1 2 * (3) // filter 6 >+ // B 1 2 * [3] >+ expect(15, i.previousNode(), t2); // filter 7 >+ // B 1 * (2) [3] >+ // -- spec says "For instance, if a NodeFilter removes a node >+ // from a document, it can still accept the node, which >+ // means that the node may be returned by the NodeIterator >+ // or TreeWalker even though it is no longer in the subtree >+ // being traversed." >+ // -- but it also says "If changes to the iterated list do not >+ // remove the reference node, they do not affect the state >+ // of the NodeIterator." >+ // B 1 * [3] >+ expect(17, i.previousNode(), t1); // filter 8 >+ // B [1] * 3 >+ return 1; >+ }, >+ function () { >+ // test 3: the infinite iterator >+ var doc = getTestDocument(); >+ for (var i = 0; i < 5; i += 1) { >+ doc.body.appendChild(doc.createElement('section')); >+ doc.body.lastChild.title = i; >+ } >+ var count = 0; >+ var test = function() { >+ if (count > 3 && count < 12) >+ doc.body.appendChild(doc.body.firstChild); >+ count += 1; >+ return (count % 2 == 0) ? 1 : 2; >+ }; >+ var i = doc.createNodeIterator(doc.body, 0xFFFFFFFF, test, true); >+ assertEquals(i.nextNode().title, "0", "failure 1"); >+ assertEquals(i.nextNode().title, "2", "failure 2"); >+ assertEquals(i.nextNode().title, "4", "failure 3"); >+ assertEquals(i.nextNode().title, "1", "failure 4"); >+ assertEquals(i.nextNode().title, "3", "failure 5"); >+ assertEquals(i.nextNode().title, "0", "failure 6"); >+ assertEquals(i.nextNode().title, "2", "failure 7"); >+ assertEquals(i.nextNode(), null, "failure 8"); >+ return 1; >+ }, >+ function () { >+ // test 4: ignoring whitespace text nodes with node iterators >+ var count = 0; >+ var expect = function(node1, node2) { >+ count += 1; >+ assertEquals(node1, node2, "expectation " + count + " failed"); >+ }; >+ var allButWS = function (node) { >+ if (node.nodeType == 3 && node.data.match(/^\s*$/)) >+ return 2; >+ return 1; >+ }; >+ var i = document.createNodeIterator(document.body, 0x01 | 0x04 | 0x08 | 0x10 | 0x20, allButWS, true); >+ // now walk the document body and make sure everything is in the right place >+ expect(i.nextNode(), document.body); // 1 >+ expect(i.nextNode(), document.getElementsByTagName('h1')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('h1')[0].firstChild); >+ expect(i.nextNode(), document.getElementsByTagName('div')[0]); >+ expect(i.nextNode(), document.getElementById('bucket1')); >+ expect(i.nextNode(), document.getElementById('bucket2')); >+ expect(i.nextNode(), document.getElementById('bucket3')); >+ expect(i.nextNode(), document.getElementById('bucket4')); >+ expect(i.nextNode(), document.getElementById('bucket5')); >+ expect(i.nextNode(), document.getElementById('bucket6')); // 10 >+ expect(i.nextNode(), document.getElementById('result')); >+ expect(i.nextNode(), document.getElementById('score')); >+ expect(i.nextNode(), document.getElementById('score').firstChild); >+ expect(i.nextNode(), document.getElementById('slash')); >+ expect(i.nextNode(), document.getElementById('slash').firstChild); >+ expect(i.nextNode(), document.getElementById('slash').nextSibling); >+ expect(i.nextNode(), document.getElementById('slash').nextSibling.firstChild); >+ expect(i.nextNode(), document.getElementsByTagName('map')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('area')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('iframe')[0]); // 20 >+ expect(i.nextNode(), document.getElementsByTagName('iframe')[0].firstChild); >+ expect(i.nextNode(), document.getElementsByTagName('iframe')[1]); >+ expect(i.nextNode(), document.getElementsByTagName('iframe')[1].firstChild); >+ expect(i.nextNode(), document.getElementsByTagName('iframe')[2]); >+ expect(i.nextNode(), document.forms[0]); >+ expect(i.nextNode(), document.forms.form.elements[0]); >+ expect(i.nextNode(), document.getElementsByTagName('table')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('tbody')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('tr')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('td')[0]); >+ expect(i.nextNode(), document.getElementsByTagName('td')[0].getElementsByTagName('p')[0]); >+ expect(i.nextNode(), document.getElementById('instructions')); >+ expect(i.nextNode(), document.getElementById('instructions').firstChild); >+ expect(i.nextNode().nodeName, "SPAN"); >+ expect(i.nextNode().nodeName, "#text"); >+ expect(i.nextNode(), document.links[1]); >+ expect(i.nextNode(), document.links[1].firstChild); >+ expect(i.nextNode(), document.getElementById('instructions').lastChild); >+ expect(i.nextNode(), null); >+ // walk it backwards for good measure >+ expect(i.previousNode(), document.getElementById('instructions').lastChild); >+ expect(i.previousNode(), document.links[1].firstChild); >+ expect(i.previousNode(), document.links[1]); >+ expect(i.previousNode().nodeName, "#text"); >+ expect(i.previousNode().nodeName, "SPAN"); >+ expect(i.previousNode(), document.getElementById('instructions').firstChild); >+ expect(i.previousNode(), document.getElementById('instructions')); >+ expect(i.previousNode(), document.getElementsByTagName('td')[0].getElementsByTagName('p')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('td')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('tr')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('tbody')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('table')[0]); >+ expect(i.previousNode(), document.forms.form.elements[0]); >+ expect(i.previousNode(), document.forms[0]); >+ expect(i.previousNode(), document.getElementsByTagName('iframe')[2]); >+ expect(i.previousNode(), document.getElementsByTagName('iframe')[1].firstChild); >+ expect(i.previousNode(), document.getElementsByTagName('iframe')[1]); >+ expect(i.previousNode(), document.getElementsByTagName('iframe')[0].firstChild); >+ expect(i.previousNode(), document.getElementsByTagName('iframe')[0]); // 20 >+ expect(i.previousNode(), document.getElementsByTagName('area')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('map')[0]); >+ expect(i.previousNode(), document.getElementById('slash').nextSibling.firstChild); >+ expect(i.previousNode(), document.getElementById('slash').nextSibling); >+ expect(i.previousNode(), document.getElementById('slash').firstChild); >+ expect(i.previousNode(), document.getElementById('slash')); >+ expect(i.previousNode(), document.getElementById('score').firstChild); >+ expect(i.previousNode(), document.getElementById('score')); >+ expect(i.previousNode(), document.getElementById('result')); >+ expect(i.previousNode(), document.getElementById('bucket6')); >+ expect(i.previousNode(), document.getElementById('bucket5')); >+ expect(i.previousNode(), document.getElementById('bucket4')); >+ expect(i.previousNode(), document.getElementById('bucket3')); >+ expect(i.previousNode(), document.getElementById('bucket2')); >+ expect(i.previousNode(), document.getElementById('bucket1')); >+ expect(i.previousNode(), document.getElementsByTagName('div')[0]); >+ expect(i.previousNode(), document.getElementsByTagName('h1')[0].firstChild); >+ expect(i.previousNode(), document.getElementsByTagName('h1')[0]); >+ expect(i.previousNode(), document.body); >+ expect(i.previousNode(), null); >+ return 1; >+ }, >+ function () { >+ // test 5: ignoring whitespace text nodes with tree walkers >+ var count = 0; >+ var expect = function(node1, node2) { >+ count += 1; >+ assertEquals(node1, node2, "expectation " + count + " failed"); >+ }; >+ var allButWS = function (node) { >+ if (node.nodeType == 3 && node.data.match(/^\s*$/)) >+ return 3; >+ return 1; >+ }; >+ var w = document.createTreeWalker(document.body, 0x01 | 0x04 | 0x08 | 0x10 | 0x20, allButWS, true); >+ expect(w.currentNode, document.body); >+ expect(w.parentNode(), null); >+ expect(w.currentNode, document.body); >+ expect(w.firstChild(), document.getElementsByTagName('h1')[0]); >+ expect(w.firstChild().nodeType, 3); >+ expect(w.parentNode(), document.getElementsByTagName('h1')[0]); >+ expect(w.nextSibling().previousSibling.nodeType, 3); >+ expect(w.nextSibling(), document.getElementsByTagName('p')[6]); >+ expect(w.nextSibling(), document.getElementsByTagName('map')[0]); >+ expect(w.lastChild(), document.getElementsByTagName('table')[0]); >+ expect(w.lastChild(), document.getElementsByTagName('tbody')[0]); >+ expect(w.nextNode(), document.getElementsByTagName('tr')[0]); >+ expect(w.nextNode(), document.getElementsByTagName('td')[0]); >+ expect(w.nextNode(), document.getElementsByTagName('p')[7]); >+ expect(w.nextNode(), document.getElementsByTagName('p')[8]); // instructions.inc paragraph >+ expect(w.previousSibling(), document.getElementsByTagName('map')[0]); >+ expect(w.previousNode().data, "100"); >+ expect(w.parentNode().tagName, "SPAN"); >+ expect(w.parentNode(), document.getElementById('result')); >+ expect(w.parentNode(), document.body); >+ expect(w.lastChild().id, "instructions"); >+ expect(w.lastChild().data.substr(0,1), "."); >+ expect(w.previousNode(), document.links[1].firstChild); >+ return 1; >+ }, >+ function () { >+ // test 6: walking outside a tree >+ var doc = getTestDocument(); >+ var p = doc.createElement('p'); >+ doc.body.appendChild(p); >+ var b = doc.body; >+ var w = document.createTreeWalker(b, 0xFFFFFFFF, null, true); >+ assertEquals(w.currentNode, b, "basic use of TreeWalker failed: currentNode"); >+ assertEquals(w.lastChild(), p, "basic use of TreeWalker failed: lastChild()"); >+ assertEquals(w.previousNode(), b, "basic use of TreeWalker failed: previousNode()"); >+ doc.documentElement.removeChild(b); >+ assertEquals(w.lastChild(), p, "TreeWalker failed after removing the current node from the tree"); >+ assertEquals(w.nextNode(), null, "failed to walk into the end of a subtree"); >+ doc.documentElement.appendChild(p); >+ assertEquals(w.previousNode(), doc.getElementsByTagName('title')[0], "failed to handle regrafting correctly"); >+ p.appendChild(b); >+ assertEquals(w.nextNode(), p, "couldn't retrace steps"); >+ assertEquals(w.nextNode(), b, "couldn't step back into root"); >+ assertEquals(w.previousNode(), null, "root didn't retake its rootish position"); >+ return 1; >+ }, >+ >+ // DOM Range >+ function () { >+ // test 7: basic ranges tests >+ var r = document.createRange(); >+ assert(r, "range not created"); >+ assert(r.collapsed, "new range wasn't collapsed"); >+ assertEquals(r.commonAncestorContainer, document, "new range's common ancestor wasn't the document"); >+ assertEquals(r.startContainer, document, "new range's start container wasn't the document"); >+ assertEquals(r.startOffset, 0, "new range's start offset wasn't zero"); >+ assertEquals(r.endContainer, document, "new range's end container wasn't the document"); >+ assertEquals(r.endOffset, 0, "new range's end offset wasn't zero"); >+ assert(r.cloneContents(), "cloneContents() didn't return an object"); >+ assertEquals(r.cloneContents().childNodes.length, 0, "nothing cloned was more than nothing"); >+ assertEquals(r.cloneRange().toString(), "", "nothing cloned stringifed to more than nothing"); >+ r.collapse(true); // no effect >+ assertEquals(r.compareBoundaryPoints(r.START_TO_END, r.cloneRange()), 0, "starting boundary point of range wasn't the same as the end boundary point of the clone range"); >+ r.deleteContents(); // no effect >+ assertEquals(r.extractContents().childNodes.length, 0, "nothing removed was more than nothing"); >+ var endOffset = r.endOffset; >+ r.insertNode(document.createComment("commented inserted to test ranges")); >+ r.setEnd(r.endContainer, endOffset + 1); // added to work around spec bug that smaug is blocking the errata for >+ try { >+ assert(!r.collapsed, "range with inserted comment is collapsed"); >+ assertEquals(r.commonAncestorContainer, document, "range with inserted comment has common ancestor that isn't the document"); >+ assertEquals(r.startContainer, document, "range with inserted comment has start container that isn't the document"); >+ assertEquals(r.startOffset, 0, "range with inserted comment has start offset that isn't zero"); >+ assertEquals(r.endContainer, document, "range with inserted comment has end container that isn't the document"); >+ assertEquals(r.endOffset, 1, "range with inserted comment has end offset that isn't after the comment"); >+ } finally { >+ document.removeChild(document.firstChild); >+ } >+ return 1; >+ }, >+ function () { >+ // test 8: moving boundary points >+ var doc = document.implementation.createDocument(null, null, null); >+ var root = doc.createElement("root"); >+ doc.appendChild(root); >+ var e1 = doc.createElement("e"); >+ root.appendChild(e1); >+ var e2 = doc.createElement("e"); >+ root.appendChild(e2); >+ var e3 = doc.createElement("e"); >+ root.appendChild(e3); >+ var r = doc.createRange(); >+ r.setStart(e2, 0); >+ r.setEnd(e3, 0); >+ assert(!r.collapsed, "non-empty range claims to be collapsed"); >+ r.setEnd(e1, 0); >+ assert(r.collapsed, "setEnd() didn't collapse the range"); >+ assertEquals(r.startContainer, e1, "startContainer is wrong after setEnd()"); >+ assertEquals(r.startOffset, 0, "startOffset is wrong after setEnd()"); >+ assertEquals(r.endContainer, e1, "endContainer is wrong after setEnd()"); >+ assertEquals(r.endOffset, 0, "endOffset is wrong after setEnd()"); >+ r.setStartBefore(e3); >+ assert(r.collapsed, "setStartBefore() didn't collapse the range"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after setStartBefore()"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong after setStartBefore()"); >+ assertEquals(r.endContainer, root, "endContainer is wrong after setStartBefore()"); >+ assertEquals(r.endOffset, 2, "endOffset is wrong after setStartBefore()"); >+ r.setEndAfter(root); >+ assert(!r.collapsed, "setEndAfter() didn't uncollapse the range"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after setEndAfter()"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong after setEndAfter()"); >+ assertEquals(r.endContainer, doc, "endContainer is wrong after setEndAfter()"); >+ assertEquals(r.endOffset, 1, "endOffset is wrong after setEndAfter()"); >+ r.setStartAfter(e2); >+ assert(!r.collapsed, "setStartAfter() collapsed the range"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after setStartAfter()"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong after setStartAfter()"); >+ assertEquals(r.endContainer, doc, "endContainer is wrong after setStartAfter()"); >+ assertEquals(r.endOffset, 1, "endOffset is wrong after setStartAfter()"); >+ var msg = ''; >+ try { >+ r.setEndBefore(doc); >+ msg = "no exception thrown for setEndBefore() the document itself"; >+ } catch (e) { >+// COMMENTED OUT FOR 2011 UPDATE - we may want to merge RangeException and DOMException >+// if (e.BAD_BOUNDARYPOINTS_ERR != 1) >+// msg = 'not a RangeException'; >+// else >+// if (e.INVALID_NODE_TYPE_ERR != 2) >+// msg = 'RangeException has no INVALID_NODE_TYPE_ERR'; >+// else >+// if ("INVALID_ACCESS_ERR" in e) >+// msg = 'RangeException has DOMException constants'; >+// else >+ if (e.code != e.INVALID_NODE_TYPE_ERR) >+ msg = 'wrong exception raised from setEndBefore()'; >+ } >+ assert(msg == "", msg); >+ assert(!r.collapsed, "setEndBefore() collapsed the range"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after setEndBefore()"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong after setEndBefore()"); >+ assertEquals(r.endContainer, doc, "endContainer is wrong after setEndBefore()"); >+ assertEquals(r.endOffset, 1, "endOffset is wrong after setEndBefore()"); >+ r.collapse(false); >+ assert(r.collapsed, "collapse() collapsed the range"); >+ assertEquals(r.startContainer, doc, "startContainer is wrong after collapse()"); >+ assertEquals(r.startOffset, 1, "startOffset is wrong after collapse()"); >+ assertEquals(r.endContainer, doc, "endContainer is wrong after collapse()"); >+ assertEquals(r.endOffset, 1, "endOffset is wrong after collapse()"); >+ r.selectNodeContents(root); >+ assert(!r.collapsed, "collapsed is wrong after selectNodeContents()"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after selectNodeContents()"); >+ assertEquals(r.startOffset, 0, "startOffset is wrong after selectNodeContents()"); >+ assertEquals(r.endContainer, root, "endContainer is wrong after selectNodeContents()"); >+ assertEquals(r.endOffset, 3, "endOffset is wrong after selectNodeContents()"); >+ r.selectNode(e2); >+ assert(!r.collapsed, "collapsed is wrong after selectNode()"); >+ assertEquals(r.startContainer, root, "startContainer is wrong after selectNode()"); >+ assertEquals(r.startOffset, 1, "startOffset is wrong after selectNode()"); >+ assertEquals(r.endContainer, root, "endContainer is wrong after selectNode()"); >+ assertEquals(r.endOffset, 2, "endOffset is wrong after selectNode()"); >+ return 1; >+ }, >+ function () { >+ // test 9: extractContents() in a Document >+ var doc = getTestDocument(); >+ var h1 = doc.createElement('h1'); >+ var t1 = doc.createTextNode('Hello '); >+ h1.appendChild(t1); >+ var em = doc.createElement('em'); >+ var t2 = doc.createTextNode('Wonderful'); >+ em.appendChild(t2); >+ h1.appendChild(em); >+ var t3 = doc.createTextNode(' Kitty'); >+ h1.appendChild(t3); >+ doc.body.appendChild(h1); >+ var p = doc.createElement('p'); >+ var t4 = doc.createTextNode('How are you?'); >+ p.appendChild(t4); >+ doc.body.appendChild(p); >+ var r = doc.createRange(); >+ r.selectNodeContents(doc); >+ assertEquals(r.toString(), "Hello Wonderful KittyHow are you?", "toString() on range selecting Document gave wrong output"); >+ r.setStart(t2, 6); >+ r.setEnd(p, 0); >+ // <body><h1>Hello <em>Wonder ful<\em> Kitty<\h1><p> How are you?<\p><\body> (the '\'s are to avoid validation errors) >+ // ^----------------------^ >+ assertEquals(r.toString(), "ful Kitty", "toString() on range crossing text nodes gave wrong output"); >+ var f = r.extractContents(); >+ // <h1><em>ful<\em> Kitty<\h1><p><\p> >+ // ccccccccccccccccMMMMMMcccccccccccc >+ assertEquals(f.nodeType, 11, "failure 1"); >+ assert(f.childNodes.length == 2, "expected two children in the result, got " + f.childNodes.length); >+ assertEquals(f.childNodes[0].tagName, "H1", "failure 3"); >+ assert(f.childNodes[0] != h1, "failure 4"); >+ assertEquals(f.childNodes[0].childNodes.length, 2, "failure 5"); >+ assertEquals(f.childNodes[0].childNodes[0].tagName, "EM", "failure 6"); >+ assert(f.childNodes[0].childNodes[0] != em, "failure 7"); >+ assertEquals(f.childNodes[0].childNodes[0].childNodes.length, 1, "failure 8"); >+ assertEquals(f.childNodes[0].childNodes[0].childNodes[0].data, "ful", "failure 9"); >+ assert(f.childNodes[0].childNodes[0].childNodes[0] != t2, "failure 10"); >+ assertEquals(f.childNodes[0].childNodes[1], t3, "failure 11"); >+ assert(f.childNodes[0].childNodes[1] != em, "failure 12"); >+ assertEquals(f.childNodes[1].tagName, "P", "failure 13"); >+ assertEquals(f.childNodes[1].childNodes.length, 0, "failure 14"); >+ assert(f.childNodes[1] != p, "failure 15"); >+ return 1; >+ }, >+ function () { >+ // test 10: Ranges and Attribute Nodes >+// COMMENTED OUT FOR 2011 UPDATE - turns out instead of dropping Attr entirely, as Acid3 originally expected, the API is just being refactored >+// var e = document.getElementById('result'); >+// if (!e.getAttributeNode) >+// return 1; // support for attribute nodes is optional in Acid3, because attribute nodes might be removed from DOM Core in the future. >+// // however, if they're supported, they'd better work: >+// var a = e.getAttributeNode('id'); >+// var r = document.createRange(); >+// r.selectNodeContents(a); >+// assertEquals(r.toString(), "result", "toString() didn't work for attribute node"); >+// var t = a.firstChild; >+// var f = r.extractContents(); >+// assertEquals(f.childNodes.length, 1, "extracted contents were the wrong length"); >+// assertEquals(f.childNodes[0], t, "extracted contents were the wrong node"); >+// assertEquals(t.textContent, 'result', "extracted contents didn't match old attribute value"); >+// assertEquals(r.toString(), '', "extracting contents didn't empty attribute value; instead equals '" + r.toString() + "'"); >+// assertEquals(e.getAttribute('id'), '', "extracting contents didn't change 'id' attribute to empty string"); >+// e.id = 'result'; >+ return 1; >+ }, >+ function () { >+ // test 11: Ranges and Comments >+ var msg; >+ var doc = getTestDocument(); >+ var c1 = doc.createComment("11111"); >+ doc.appendChild(c1); >+ var r = doc.createRange(); >+ r.selectNode(c1); >+ msg = 'wrong exception raised'; >+ try { >+ r.surroundContents(doc.createElement('a')); >+ msg = 'no exception raised'; >+ } catch (e) { >+ if ('code' in e) >+ msg += '; code = ' + e.code; >+ if (e.code == 3) // HIERARCHY_REQUEST_ERR >+ msg = ''; >+ } >+ assert(msg == '', "when inserting <a> into Document with another child: " + msg); >+ var c2 = doc.createComment("22222"); >+ doc.body.appendChild(c2); >+ var c3 = doc.createComment("33333"); >+ doc.body.appendChild(c3); >+ r.setStart(c2, 2); >+ r.setEnd(c3, 3); >+ var msg = 'wrong exception raised'; >+ try { >+ r.surroundContents(doc.createElement('a')); >+ msg = 'no exception raised'; >+ } catch (e) { >+// COMMENTED OUT FOR 2011 UPDATE - DOM Core changes the exception from RangeException.BAD_BOUNDARYPOINTS_ERR (1) to DOMException.INVALID_STATE_ERR (11) >+// if ('code' in e) >+// msg += '; code = ' + e.code; >+// if (e.code == 1) >+ msg = ''; >+ } >+ assert(msg == '', "when trying to surround two halves of comment: " + msg); >+ assertEquals(r.toString(), "", "comments returned text"); >+ return 1; >+ }, >+ function () { >+ // test 12: Ranges under mutations: insertion into text nodes >+ var doc = getTestDocument(); >+ var p = doc.createElement('p'); >+ var t1 = doc.createTextNode('12345'); >+ p.appendChild(t1); >+ var t2 = doc.createTextNode('ABCDE'); >+ p.appendChild(t2); >+ doc.body.appendChild(p); >+ var r = doc.createRange(); >+ r.setStart(p.firstChild, 2); >+ r.setEnd(p.firstChild, 3); >+ assert(!r.collapsed, "collapsed is wrong at start"); >+ assertEquals(r.commonAncestorContainer, p.firstChild, "commonAncestorContainer is wrong at start"); >+ assertEquals(r.startContainer, p.firstChild, "startContainer is wrong at start"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong at start"); >+ assertEquals(r.endContainer, p.firstChild, "endContainer is wrong at start"); >+ assertEquals(r.endOffset, 3, "endOffset is wrong at start"); >+ assertEquals(r.toString(), "3", "range in text node stringification failed"); >+ r.insertNode(p.lastChild); >+ assertEquals(p.childNodes.length, 3, "insertion of node made wrong number of child nodes"); >+ assertEquals(p.childNodes[0], t1, "unexpected first text node"); >+ assertEquals(p.childNodes[0].data, "12", "unexpected first text node contents"); >+ assertEquals(p.childNodes[1], t2, "unexpected second text node"); >+ assertEquals(p.childNodes[1].data, "ABCDE", "unexpected second text node"); >+ assertEquals(p.childNodes[2].data, "345", "unexpected third text node contents"); >+ // The spec is very vague about what exactly should be in the range afterwards: >+ // the insertion results in a splitText(), which it says is equivalent to a truncation >+ // followed by an insertion, but it doesn't say what to do when you have a truncation, >+ // so we don't know where either the start or the end boundary points end up. >+ // The spec really should be clarified for how to handle splitText() and >+ // text node truncation in general >+ // The only thing that seems very clear is that the inserted text node should >+ // be in the range, and it has to be at the start, since insertion always puts it at >+ // the start. >+ assert(!r.collapsed, "collapsed is wrong after insertion"); >+ assert(r.toString().match(/^ABCDE/), "range didn't start with the expected text; range stringified to '" + r.toString() + "'"); >+ return 1; >+ }, >+ function () { >+ // test 13: Ranges under mutations: deletion >+ var doc = getTestDocument(); >+ var p = doc.createElement('p'); >+ p.appendChild(doc.createTextNode("12345")); >+ doc.body.appendChild(p); >+ var r = doc.createRange(); >+ r.setEnd(doc.body, 1); >+ r.setStart(p.firstChild, 2); >+ assert(!r.collapsed, "collapsed is wrong at start"); >+ assertEquals(r.commonAncestorContainer, doc.body, "commonAncestorContainer is wrong at start"); >+ assertEquals(r.startContainer, p.firstChild, "startContainer is wrong at start"); >+ assertEquals(r.startOffset, 2, "startOffset is wrong at start"); >+ assertEquals(r.endContainer, doc.body, "endContainer is wrong at start"); >+ assertEquals(r.endOffset, 1, "endOffset is wrong at start"); >+ doc.body.removeChild(p); >+ assert(r.collapsed, "collapsed is wrong after deletion"); >+ assertEquals(r.commonAncestorContainer, doc.body, "commonAncestorContainer is wrong after deletion"); >+ assertEquals(r.startContainer, doc.body, "startContainer is wrong after deletion"); >+ assertEquals(r.startOffset, 0, "startOffset is wrong after deletion"); >+ assertEquals(r.endContainer, doc.body, "endContainer is wrong after deletion"); >+ assertEquals(r.endOffset, 0, "endOffset is wrong after deletion"); >+ return 1; >+ }, >+ >+ // HTTP >+ function () { >+ // test 14: HTTP - Content-Type: image/png >+ assert(!notifications['empty.png'], "privilege escalation security bug: PNG ran script"); >+ var iframe = document.getElementsByTagName('iframe')[0]; >+ assert(iframe, "no <iframe> support"); >+ if (iframe && iframe.contentDocument) { >+ var ps = iframe.contentDocument.getElementsByTagName('p'); >+ if (ps.length > 0) { >+ if (ps[0].firstChild && ps[0].firstChild.data && ps[0].firstChild.data == 'FAIL') >+ fail("PNG was parsed as HTML."); >+ } >+ } >+ return 1; >+ }, >+ function () { >+ // test 15: HTTP - Content-Type: text/plain >+ assert(!notifications['empty.txt'], "privilege escalation security bug: text file ran script"); >+ var iframe = document.getElementsByTagName('iframe')[1]; >+ assert(iframe, "no <iframe> support"); >+ if (iframe && iframe.contentDocument) { >+ var ps = iframe.contentDocument.getElementsByTagName('p'); >+ if (ps.length > 0) { >+ if (ps[0].firstChild && ps[0].firstChild.data && ps[0].firstChild.data == 'FAIL') >+ fail("text/plain file was parsed as HTML"); >+ } >+ } >+ return 1; >+ }, >+ function () { >+ // test 16: <object> handling and HTTP status codes >+ var oC = document.createElement('object'); >+ oC.appendChild(document.createTextNode("FAIL")); >+ var oB = document.createElement('object'); >+ var oA = document.createElement('object'); >+ oA.data = "support-a.png?pipe=status(404)"; >+ oB.data = "support-b.png"; >+ oB.appendChild(oC); >+ oC.data = "support-c.png"; >+ oA.appendChild(oB); >+ document.getElementsByTagName("map")[0].appendChild(oA); >+ // assuming the above didn't raise any exceptions, this test has passed >+ // (the real test is whether the rendering is correct) >+ return 1; >+ }, >+ >+ // bucket 2: DOM2 Core and DOM2 Events >+ // Core >+ function () { >+ // test 17: hasAttribute >+ // missing attribute >+ assert(!document.getElementsByTagName('map')[0].hasAttribute('id'), "hasAttribute failure for 'id' on map"); >+ // implied attribute >+ assert(!document.getElementsByTagName('form')[0].hasAttribute('method'), "hasAttribute failure for 'method' on form"); >+ // actually present attribute >+ assert(document.getElementsByTagName('form')[0].hasAttribute('action'), "hasAttribute failure for 'action' on form"); >+ assertEquals(document.getElementsByTagName('form')[0].getAttribute('action'), '', "attribute 'action' on form has wrong value"); >+ return 2; >+ }, >+ function () { >+ // test 18: nodeType (this test also relies on accurate parsing of the document) >+ assertEquals(document.nodeType, 9, "document nodeType wrong"); >+ assertEquals(document.documentElement.nodeType, 1, "element nodeType wrong"); >+// COMMENTED OUT FOR 2011 UPDATE - turns out instead of dropping Attr entirely, as Acid3 originally expected, the API is just being refactored >+// if (document.createAttribute) // support for attribute nodes is optional in Acid3, because attribute nodes might be removed from DOM Core in the future. >+// assertEquals(document.createAttribute('test').nodeType, 2, "attribute nodeType wrong"); // however, if they're supported, they'd better work >+ assertEquals(document.getElementById('score').firstChild.nodeType, 3, "text node nodeType wrong"); >+ assertEquals(document.firstChild.nodeType, 10, "DOCTYPE nodeType wrong"); >+ return 2; >+ }, >+ function () { >+ // test 19: value of constants >+ var e = null; >+ try { >+ document.body.appendChild(document.documentElement); >+ // raises a HIERARCHY_REQUEST_ERR >+ } catch (err) { >+ e = err; >+ } >+ assertEquals(document.DOCUMENT_FRAGMENT_NODE, 11, "document DOCUMENT_FRAGMENT_NODE constant missing or wrong"); >+ assertEquals(document.body.COMMENT_NODE, 8, "element COMMENT_NODE constant missing or wrong"); >+ assertEquals(document.createTextNode('').ELEMENT_NODE, 1, "text node ELEMENT_NODE constant missing or wrong"); >+ assert(e.HIERARCHY_REQUEST_ERR == 3, "exception HIERARCHY_REQUEST_ERR constant missing or wrong") >+ assertEquals(e.code, 3, "incorrect exception raised from appendChild()"); >+ return 2; >+ }, >+ function () { >+ // test 20: nulls bytes in various places >+ assert(!document.getElementById('bucket1\0error'), "null in getElementById() probably terminated string"); >+ var ok = true; >+ try { >+ document.createElement('form\0div'); >+ ok = false; >+ } catch (e) { >+ if (e.code != 5) >+ ok = false; >+ } >+ assert(ok, "didn't raise the right exception for null byte in createElement()"); >+ return 2; >+ }, >+ function () { >+ // test 21: basic namespace stuff >+ var element = document.createElementNS('http://ns.example.com/', 'prefix:localname'); >+ assertEquals(element.tagName, 'prefix:localname', "wrong tagName"); >+ assertEquals(element.nodeName, 'prefix:localname', "wrong nodeName"); >+ assertEquals(element.prefix, 'prefix', "wrong prefix"); >+ assertEquals(element.localName, 'localname', "wrong localName"); >+ assertEquals(element.namespaceURI, 'http://ns.example.com/', "wrong namespaceURI"); >+ return 2; >+ }, >+ function () { >+ // test 22: createElement() with invalid tag names >+ var test = function (name) { >+ var result; >+ try { >+ var div = document.createElement(name); >+ } catch (e) { >+ result = e; >+ } >+ assert(result, "no exception for createElement('" + name + "')"); >+ assertEquals(result.code, 5, "wrong exception for createElement('" + name + "')"); // INVALID_CHARACTER_ERR >+ } >+ test('<div>'); >+ test('0div'); >+ test('di v'); >+ test('di<v'); >+ test('-div'); >+ test('.div'); >+ return 2; >+ }, >+ function () { >+ // test 23: createElementNS() with invalid tag names >+ var test = function (name, ns, code) { >+ var result; >+ try { >+ var div = document.createElementNS(ns, name); >+ } catch (e) { >+ result = e; >+ } >+ assert(result, "no exception for createElementNS('" + ns + "', '" + name + "')"); >+ assertEquals(result.code, code, "wrong exception for createElementNS('" + ns + "', '" + name + "')"); >+ } >+ test('<div>', null, 5); >+ test('0div', null, 5); >+ test('di v', null, 5); >+ test('di<v', null, 5); >+ test('-div', null, 5); >+ test('.div', null, 5); >+ test('<div>', "http://example.com/", 5); >+ test('0div', "http://example.com/", 5); >+ test('di<v', "http://example.com/", 5); >+ test('-div', "http://example.com/", 5); >+ test('.div', "http://example.com/", 5); >+ //test(':div', null, 14); >+ //test(':div', "http://example.com/", 14); >+ test('d:iv', null, 14); >+ test('xml:test', "http://example.com/", 14); >+ test('xmlns:test', "http://example.com/", 14); // (technically a DOM3 Core test) >+ test('x:test', "http://www.w3.org/2000/xmlns/", 14); // (technically a DOM3 Core test) >+ document.createElementNS("http://www.w3.org/2000/xmlns/", 'xmlns:test'); // (technically a DOM3 Core test) >+ return 2; >+ }, >+ function () { >+ // test 24: event handler attributes >+ assertEquals(document.body.getAttribute('onload'), "update() /* this attribute's value is tested in one of the tests */ ", "onload value wrong"); >+ return 2; >+ }, >+ function () { >+ // test 25: test namespace checking in createDocumentType, and >+ // check that exceptions that are thrown are DOMException objects >+ var message = ""; >+ try { >+ document.implementation.createDocumentType('a:', '', ''); /* doesn't contain an illegal character; is malformed */ >+ message = "failed to raise exception"; >+ } catch (e) { >+ /*if (e.code != e.NAMESPACE_ERR) >+ message = "wrong exception"; >+ else if (e.INVALID_ACCESS_ERR != 15) >+ message = "exceptions don't have all the constants";*/ >+ } >+ if (message) >+ fail(message); >+ return 2; >+ }, >+ function () { >+ // test 26: check that document tree survives while still accessible >+ var d; >+ // e1 - an element that's in a document >+ d = document.implementation.createDocument(null, null, null); >+ var e1 = d.createElement('test'); >+ d.appendChild(d.createElement('root')); >+ d.documentElement.appendChild(e1); >+ assert(e1.parentNode, "e1 - parent element doesn't exist"); >+ assert(e1.parentNode.ownerDocument, "e1 - document doesn't exist"); >+ // e2 - an element that's not in a document >+ d = document.implementation.createDocument(null, null, null); >+ var e2 = d.createElement('test'); >+ d.createElement('root').appendChild(e2); >+ assert(e2.parentNode, "e2 - parent element doesn't exist"); >+ assert(e2.parentNode.ownerDocument, "e2 - document doesn't exist"); >+ // now try to decouple them >+ d = null; >+ kungFuDeathGrip = [e1, e2]; >+ assert(e1.parentNode, "e1 - parent element doesn't exist after dropping reference to document"); >+ assert(e1.parentNode.ownerDocument, "e1 - document doesn't exist after dropping reference to document"); >+ assert(e2.parentNode, "e2 - parent element doesn't exist after dropping reference to document"); >+ assert(e2.parentNode.ownerDocument, "e2 - document doesn't exist after dropping reference to document"); >+ var loops = new Date().valueOf() * 2.813435e-9 - 2412; // increases linearly over time >+ for (var i = 0; i < loops; i += 1) { >+ // we want to force a GC here, so we use up lots of memory >+ // we take the opportunity to sneak in a perf test to make DOM and JS stuff faster... >+ d = new Date(); >+ d = new (function (x) { return { toString: function () { return x.toString() } } })(d.valueOf()); >+ d = document.createTextNode("iteration " + i + " at " + d); >+ document.createElement('a').appendChild(d); >+ d = d.parentNode; >+ document.body.insertBefore(d, document.getElementById('bucket1').parentNode); >+ assert(document.getElementById('bucket2').nextSibling.parentNode.previousSibling.firstChild.data.match(/AT\W/i), "iteration " + i + " failed"); >+ d.setAttribute('class', d.textContent); >+ document.body.removeChild(d); >+ } >+ assert(e1.parentNode, "e1 - parent element doesn't exist after looping"); >+ assert(e1.parentNode.ownerDocument, "e1 - document doesn't exist after looping"); >+ assertEquals(e1.parentNode.ownerDocument.nodeType, 9, "e1 - document node type has wrong node type"); >+ assert(e2.parentNode, "e2 - parent element doesn't exist after looping"); >+ assert(e2.parentNode.ownerDocument, "e2 - document doesn't exist after looping"); >+ assertEquals(e2.parentNode.ownerDocument.nodeType, 9, "e2 - document node type has wrong node type"); >+ return 2; >+ }, >+ function () { >+ // test 27: a continuation of the previous test >+ var e1 = kungFuDeathGrip[0]; >+ var e2 = kungFuDeathGrip[1]; >+ kungFuDeathGrip = null; >+ assert(e1, "e1 - element itself didn't survive across tests"); >+ assert(e1.parentNode, "e1 - parent element doesn't exist after waiting"); >+ assert(e1.parentNode.ownerDocument, "e1 - document doesn't exist after waiting"); >+ assertEquals(e1.parentNode.ownerDocument.nodeType, 9, "e1 - document node type has wrong node type after waiting"); >+ assert(e2, "e2 - element itself didn't survive across tests"); >+ assert(e2.parentNode, "e2 - parent element doesn't exist after waiting"); >+ assert(e2.parentNode.ownerDocument, "e2 - document doesn't exist after waiting"); >+ assertEquals(e2.parentNode.ownerDocument.nodeType, 9, "e2 - document node type has wrong node type after waiting"); >+ return 2; >+ }, >+ function () { >+ // test 28: getElementById() >+ // ...and name="" >+ assert(document.getElementById('form') !== document.getElementsByTagName('form')[0], "getElementById() searched on 'name'"); >+ // ...and a space character as the ID >+ var div = document.createElement('div'); >+ div.appendChild(document.createTextNode('FAIL')); >+ div.id = " "; >+ document.body.appendChild(div); // it's hidden by CSS >+ assert(div === document.getElementById(" "), "getElementById() didn't return the right element"); >+ return 2; >+ }, >+ function () { >+ // test 29: check that whitespace survives cloning >+ var t1 = document.getElementsByTagName('table')[0]; >+ var t2 = t1.cloneNode(true); >+ assertEquals(t2.tBodies[0].rows[0].cells[0].firstChild.tagName, 'P', "<p> didn't clone right"); >+ assertEquals(t2.tBodies[0].rows[0].cells[0].firstChild.childNodes.length, 0, "<p> got child nodes after cloning"); >+ assertEquals(t2.childNodes.length, 2, "cloned table had wrong number of children"); >+ assertEquals(t2.lastChild.data, " ", "cloned table lost whitespace text node"); >+ return 2; >+ }, >+ >+ // Events >+ function () { >+ // test 30: dispatchEvent() >+ var count = 0; >+ var ok = true; >+ var test = function (event) { >+ if (event.detail != 6) >+ ok = false; >+ count++; >+ }; >+ // test event listener addition >+ document.getElementById('result').addEventListener('test', test, false); >+ // test event creation >+ var event = document.createEvent('UIEvents'); >+ event.initUIEvent('test', true, false, null, 6); >+ // test event dispatch on elements and text nodes >+ assert(document.getElementById('score').dispatchEvent(event), "dispatchEvent #1 failed"); >+ assert(document.getElementById('score').nextSibling.dispatchEvent(event), "dispatchEvent #2 failed"); >+ // test event listener removal >+ document.getElementById('result').removeEventListener('test', test, false); >+ assert(document.getElementById('score').dispatchEvent(event), "dispatchEvent #3 failed"); >+ assertEquals(count, 2, "unexpected number of events handled"); >+ assert(ok, "unexpected events handled"); >+ return 2; >+ }, >+ function () { >+ // test 31: event.stopPropagation() and capture >+ // we're going to use an input element because we can cause events to bubble from it >+ var input = document.createElement('input'); >+ var div = document.createElement('div'); >+ div.appendChild(input); >+ document.body.appendChild(div); >+ // the test will consist of two event handlers: >+ var ok = true; >+ var captureCount = 0; >+ var testCapture = function (event) { >+ ok = ok && >+ (event.type == 'click') && >+ (event.target == input) && >+ (event.currentTarget == div) && >+ (event.eventPhase == 1) && >+ (event.bubbles) && >+ (event.cancelable); >+ captureCount++; >+ event.stopPropagation(); // this shouldn't stop it from firing both times on the div element >+ }; >+ var testBubble = function (event) { >+ ok = false; >+ }; >+ // one of which is added twice: >+ div.addEventListener('click', function (event) { testCapture(event) }, true); >+ div.addEventListener('click', function (event) { testCapture(event) }, true); >+ div.addEventListener('click', testBubble, false); >+ // we cause an event to bubble like this: >+ input.type = 'reset'; >+ input.click(); >+ // cleanup afterwards >+ document.body.removeChild(div); >+ // capture handler should have been called twice >+ assertEquals(captureCount, 2, "capture handler called the wrong number of times"); >+ assert(ok, "capture handler called incorrectly"); >+ return 2; >+ }, >+ function () { >+ // test 32: events bubbling through Document node >+ // event handler: >+ var ok = true; >+ var count = 0; >+ var test = function (event) { >+ count += 1; >+ if (event.eventPhase != 3) >+ ok = false; >+ } >+ // register event handler >+ document.body.addEventListener('click', test, false); >+ // create an element that bubbles an event, and bubble it >+ var input = document.createElement('input'); >+ var div = document.createElement('div'); >+ div.appendChild(input); >+ document.body.appendChild(div); >+ input.type = 'reset'; >+ input.click(); >+ // unregister event handler >+ document.body.removeEventListener('click', test, false); >+ // check that it's removed for good >+ input.click(); >+ // remove the newly added elements >+ document.body.removeChild(div); >+ assertEquals(count, 1, "capture handler called the wrong number of times"); >+ assert(ok, "capture handler called incorrectly"); >+ return 2; >+ }, >+ >+ // bucket 3: DOM2 Views, DOM2 Style, and Selectors >+ function () { >+ // test 33: basic tests for selectors - classes, attributes >+ var p; >+ var builder = function(doc) { >+ p = doc.createElement("p"); >+ doc.body.appendChild(p); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ p.className = "selectorPingTest"; >+ var good = add(".selectorPingTest"); >+ add(".SelectorPingTest"); >+ add(".selectorpingtest"); >+ expect(doc.body, 0, "failure 1"); >+ expect(p, good, "failure 2"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ p.className = 'a\u0020b\u0009c\u000Ad\u000De\u000Cf\u2003g\u3000h'; >+ var good = add(".a.b.c.d.e.f\\2003g\\3000h"); >+ expect(p, good, "whitespace error in class processing"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ p.className = "selectorPingTest"; >+ var good = add("[class=selectorPingTest]"); >+ add("[class=SelectorPingTest]"); >+ add("[class=selectorpingtest]"); >+ expect(doc.body, 0, "failure 3"); >+ expect(p, good, "class attribute matching failed"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ p.className = "selectorPingTest"; >+ var good = add("[title=selectorPingTest]"); >+ add("[title=SelectorPingTest]"); >+ add("[title=selectorpingtest]"); >+ expect(doc.body, 0, "failure 4"); >+ expect(p, 0, "failure 5"); >+ p.title = "selectorPingTest"; >+ expect(doc.body, 0, "failure 6"); >+ expect(p, good, "failure 7"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ p.setAttribute('align', 'right and left'); >+ var good = add("[align=\"right and left\"]"); >+ add("[align=left]"); >+ add("[align=right]"); >+ expect(p, good, "align attribute mismatch"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 34: :lang() and [|=] >+ var div1; >+ var div2; >+ var p; >+ var builder = function(doc) { >+ div1 = doc.createElement('div'); >+ div1.setAttribute("lang", "english"); >+ div1.setAttribute("class", "widget-tree"); >+ doc.body.appendChild(div1); >+ div2 = doc.createElement('div'); >+ div2.setAttribute("lang", "en-GB"); >+ div2.setAttribute("class", "WIDGET"); >+ doc.body.appendChild(div2); >+ p = doc.createElement('p'); >+ div2.appendChild(p); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var lang_en = add(":lang(en)"); >+ expect(div1, 0, "lang=english should not be matched by :lang(en)"); >+ expect(div2, lang_en, "lang=en-GB should be matched by :lang(en)"); >+ expect(p, lang_en, "descendants inheriting lang=en-GB should be matched by :lang(en)"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var class_widget = add("[class|=widget]"); >+ expect(div1, class_widget, "class attribute should be supported by |= attribute selectors"); >+ expect(div2, 0, "class attribute is case-sensitive"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 35: :first-child >+ selectorTest(function (doc, add, expect) { >+ var notFirst = 0; >+ var first = add(":first-child"); >+ var p1 = doc.createElement("p"); >+ doc.body.appendChild(doc.createTextNode(" TEST ")); >+ doc.body.appendChild(p1); >+ //expect(doc.documentElement, notFirst, "root element, with no parent node, claims to be a :first-child"); >+ expect(doc.documentElement.firstChild, first, "first child of root node didn't match :first-child"); >+ expect(doc.documentElement.firstChild.firstChild, first, "failure 3"); >+ expect(doc.body, notFirst, "failure 4"); >+ expect(p1, first, "failure 5"); >+ var p2 = doc.createElement("p"); >+ doc.body.appendChild(p2); >+ expect(doc.body, notFirst, "failure 6"); >+ expect(p1, first, "failure 7"); >+ expect(p2, notFirst, "failure 8"); >+ var p0 = doc.createElement("p"); >+ doc.body.insertBefore(p0, p1); >+ expect(doc.body, notFirst, "failure 9"); >+ expect(p0, first, "failure 10"); >+ expect(p1, notFirst, ":first-child still applies to element that was previously a first child"); >+ expect(p2, notFirst, "failure 12"); >+ doc.body.insertBefore(p0, p2); >+ expect(doc.body, notFirst, "failure 13"); >+ expect(p1, first, "failure 14"); >+ expect(p0, notFirst, "failure 15"); >+ expect(p2, notFirst, "failure 16"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 36: :last-child >+ var p1; >+ var p2; >+ var builder = function(doc) { >+ p1 = doc.createElement('p'); >+ p2 = doc.createElement('p'); >+ doc.body.appendChild(p1); >+ doc.body.appendChild(p2); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var last = add(":last-child"); >+ expect(p1, 0, "control test for :last-child failed"); >+ expect(p2, last, "last child did not match :last-child"); >+ doc.body.appendChild(p1); >+ expect(p2, 0, ":last-child matched element with a following sibling"); >+ expect(p1, last, "failure 4"); >+ p1.appendChild(p2); >+ expect(p2, last, "failure 5"); >+ expect(p1, last, "failure 6"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var last = add(":last-child"); >+ expect(p1, 0, "failure 7"); >+ expect(p2, last, "failure 8"); >+ doc.body.insertBefore(p2, p1); >+ expect(p2, 0, "failure 9"); >+ expect(p1, last, "failure 10"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var last = add(":last-child"); >+ expect(p1, 0, "failure 11"); >+ expect(p2, last, "failure 12"); >+ doc.body.removeChild(p2); >+ expect(p1, last, "failure 13"); >+ assertEquals(p1.nextSibling, null, "failure 14"); >+ assertEquals(p2.parentNode, null, "failure 15"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 37: :only-child >+ var p1; >+ var p2; >+ var builder = function(doc) { >+ p1 = doc.createElement('p'); >+ p2 = doc.createElement('p'); >+ doc.body.appendChild(p1); >+ doc.body.appendChild(p2); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var only = add(":only-child"); >+ expect(p1, 0, "control test for :only-child failed"); >+ expect(p2, 0, "failure 2"); >+ doc.body.removeChild(p2); >+ expect(p1, only, ":only-child did not match only child"); >+ p1.appendChild(p2); >+ expect(p2, only, "failure 4"); >+ expect(p1, only, "failure 5"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var only = add(":only-child"); >+ expect(p1, 0, "failure 6"); >+ expect(p2, 0, "failure 7"); >+ doc.body.removeChild(p1); >+ expect(p2, only, "failure 8"); >+ p2.appendChild(p1); >+ expect(p2, only, "failure 9"); >+ expect(p1, only, "failure 10"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var only = add(":only-child"); >+ expect(p1, 0, "failure 11"); >+ expect(p2, 0, "failure 12"); >+ var span1 = doc.createElement('span'); >+ p1.appendChild(span1); >+ expect(p1, 0, "failure 13"); >+ expect(p2, 0, "failure 14"); >+ expect(span1, only, "failure 15"); >+ var span2 = doc.createElement('span'); >+ p1.appendChild(span2); >+ expect(p1, 0, "failure 16"); >+ expect(p2, 0, "failure 17"); >+ expect(span1, 0, "failure 18"); >+ expect(span2, 0, "failure 19"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var only = add(":only-child"); >+ expect(p1, 0, "failure 20"); >+ expect(p2, 0, "failure 21"); >+ var span1 = doc.createElement('span'); >+ p2.appendChild(span1); >+ expect(p1, 0, "failure 22"); >+ expect(p2, 0, "failure 23"); >+ expect(span1, only, "failure 24"); >+ var span2 = doc.createElement('span'); >+ p2.insertBefore(span2, span1); >+ expect(p1, 0, "failure 25"); >+ expect(p2, 0, "failure 26"); >+ expect(span1, 0, "failure 27"); >+ expect(span2, 0, "failure 28"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 38: :empty >+ selectorTest(function (doc, add, expect) { >+ var empty = add(":empty"); >+ var p = doc.createElement('p'); >+ doc.body.appendChild(p); >+ expect(p, empty, "empty p element didn't match :empty"); >+ var span = doc.createElement('span'); >+ p.appendChild(span); >+ expect(p, 0, "adding children didn't stop the element matching :empty"); >+ expect(span, empty, "empty span element didn't match :empty"); >+ p.removeChild(span); >+ expect(p, empty, "removing all children didn't make the element match :empty"); >+ p.appendChild(doc.createComment("c")); >+ p.appendChild(doc.createTextNode("")); >+ expect(p, empty, "element with a comment node and an empty text node didn't match :empty"); >+ p.appendChild(doc.createTextNode("")); >+ expect(p, empty, "element with a comment node and two empty text nodes didn't match :empty"); >+ p.lastChild.data = " "; >+ expect(p, 0, "adding text to a text node didn't make the element non-:empty"); >+ assertEquals(p.childNodes.length, 3, "text nodes may have merged"); >+// COMMENTED OUT FOR 2011 UPDATE - replaceWholeText() might go away entirely >+// p.childNodes[1].replaceWholeText(""); >+// assertEquals(p.childNodes.length, 1, "replaceWholeText('') didn't remove text nodes"); >+// REPLACEMENT: >+ assertEquals(p.childNodes[1].nodeType, 3, "missing text node before first removal"); >+ p.removeChild(p.childNodes[1]); >+ assertEquals(p.childNodes[1].nodeType, 3, "missing text node before second removal"); >+ p.removeChild(p.childNodes[1]); >+// END REPLACEMENT TEST >+ expect(p, empty, "element with a comment node only didn't match :empty"); >+ p.appendChild(doc.createElementNS("http://example.com/", "test")); >+ expect(p, 0, "adding an element in a namespace didn't make the element non-:empty"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 39: :nth-child, :nth-last-child >+ var ps; >+ var builder = function(doc) { >+ ps = [ >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p') >+ ]; >+ for (var i = 0; i < ps.length; i += 1) >+ doc.body.appendChild(ps[i]); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-child(odd)"); >+ for (var i = 0; i < ps.length; i += 1) >+ expect(ps[i], i % 2 ? 0 : match, ":nth-child(odd) failed with child " + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-child(even)"); >+ for (var i = 0; i < ps.length; i += 1) >+ expect(ps[i], i % 2 ? match : 0 , ":nth-child(even) failed with child " + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-child(odd)"); >+ doc.body.removeChild(ps[5]); >+ for (var i = 0; i < 5; i += 1) >+ expect(ps[i], i % 2 ? 0 : match, ":nth-child(odd) failed after removal with child " + i); >+ for (var i = 6; i < ps.length; i += 1) >+ expect(ps[i], i % 2 ? match : 0, ":nth-child(odd) failed after removal with child " + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-child(even)"); >+ doc.body.removeChild(ps[5]); >+ for (var i = 0; i < 5; i += 1) >+ expect(ps[i], i % 2 ? match : 0, ":nth-child(even) failed after removal with child " + i); >+ for (var i = 6; i < ps.length; i += 1) >+ expect(ps[i], i % 2 ? 0 : match, ":nth-child(even) failed after removal with child " + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-child(-n+3)"); >+ for (var i = 0; i < 3; i += 1) >+ expect(ps[i], match, ":nth-child(-n+3) failed with child " + i); >+ for (var i = 3; i < ps.length; i += 1) >+ expect(ps[i], 0, ":nth-child(-n+3) failed with child " + i); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 40: :first-of-type, :last-of-type, :only-of-type, :nth-of-type, :nth-last-of-type >+ var elements; >+ var builder = function(doc) { >+ elements = [ >+ doc.createElement('p'), >+ doc.createElement('div'), >+ doc.createElement('div'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('p'), >+ doc.createElement('div'), >+ doc.createElement('address'), >+ doc.createElement('div'), >+ doc.createElement('div'), >+ doc.createElement('div'), >+ doc.createElement('p'), >+ doc.createElement('div'), >+ doc.createElement('p') >+ ]; >+ for (var i = 0; i < elements.length; i += 1) >+ doc.body.appendChild(elements[i]); >+ }; >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":first-of-type"); >+ var values = [1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 1:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":last-of-type"); >+ var values = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 2:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":only-of-type"); >+ var values = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 3:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-of-type(3n-1)"); >+ var values = [0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 4:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-of-type(3n+1)"); >+ var values = [1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 5:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-last-of-type(2n)"); >+ var values = [1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 6:" + i); >+ }); >+ selectorTest(function (doc, add, expect) { >+ builder(doc); >+ var match = add(":nth-last-of-type(-5n+3)"); >+ var values; >+ values = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 7:" + i); >+ doc.body.appendChild(doc.createElement('blockquote')); >+ values = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 8:" + i); >+ doc.body.appendChild(doc.createElement('div')); >+ values = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; >+ for (var i = 0; i < elements.length; i += 1) >+ expect(elements[i], values[i] ? match : 0, "part 9:" + i); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 41: :root, :not() >+ selectorTest(function (doc, add, expect) { >+ var match = add(":not(:root)"); >+ var p = doc.createElement('p'); >+ doc.body.appendChild(p); >+ expect(doc.documentElement, 0, "root was :not(:root)"); >+ expect(doc.documentElement.childNodes[0], match,"head was not :not(:root)"); >+ expect(doc.documentElement.childNodes[1], match,"body was not :not(:root)"); >+ expect(doc.documentElement.childNodes[0].firstChild, match,"title was not :not(:root)"); >+ expect(p, match,"p was not :not(:root)"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 42: +, ~, >, and ' ' in dynamic situations >+ selectorTest(function (doc, add, expect) { >+ var div1 = doc.createElement('div'); >+ div1.id = "div1"; >+ doc.body.appendChild(div1); >+ var div2 = doc.createElement('div'); >+ doc.body.appendChild(div2); >+ var div3 = doc.createElement('div'); >+ doc.body.appendChild(div3); >+ var div31 = doc.createElement('div'); >+ div3.appendChild(div31); >+ var div311 = doc.createElement('div'); >+ div31.appendChild(div311); >+ var div3111 = doc.createElement('div'); >+ div311.appendChild(div3111); >+ var match = add("#div1 ~ div div + div > div"); >+ expect(div1, 0, "failure 1"); >+ expect(div2, 0, "failure 2"); >+ expect(div3, 0, "failure 3"); >+ expect(div31, 0, "failure 4"); >+ expect(div311, 0, "failure 5"); >+ expect(div3111, 0, "failure 6"); >+ var div310 = doc.createElement('div'); >+ div31.insertBefore(div310, div311); >+ expect(div1, 0, "failure 7"); >+ expect(div2, 0, "failure 8"); >+ expect(div3, 0, "failure 9"); >+ expect(div31, 0, "failure 10"); >+ expect(div310, 0, "failure 11"); >+ expect(div311, 0, "failure 12"); >+ expect(div3111, match, "rule did not start matching after change"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ var div1 = doc.createElement('div'); >+ div1.id = "div1"; >+ doc.body.appendChild(div1); >+ var div2 = doc.createElement('div'); >+ div1.appendChild(div2); >+ var div3 = doc.createElement('div'); >+ div2.appendChild(div3); >+ var div4 = doc.createElement('div'); >+ div3.appendChild(div4); >+ var div5 = doc.createElement('div'); >+ div4.appendChild(div5); >+ var div6 = doc.createElement('div'); >+ div5.appendChild(div6); >+ var match = add("#div1 > div div > div"); >+ expect(div1, 0, "failure 14"); >+ expect(div2, 0, "failure 15"); >+ expect(div3, 0, "failure 16"); >+ expect(div4, match, "failure 17"); >+ expect(div5, match, "failure 18"); >+ expect(div6, match, "failure 19"); >+ var p34 = doc.createElement('p'); >+ div3.insertBefore(p34, div4); >+ p34.insertBefore(div4, null); >+ expect(div1, 0, "failure 20"); >+ expect(div2, 0, "failure 21"); >+ expect(div3, 0, "failure 22"); >+ expect(p34, 0, "failure 23"); >+ expect(div4, 0, "failure 24"); >+ expect(div5, match, "failure 25"); >+ expect(div6, match, "failure 26"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ var div1 = doc.createElement('div'); >+ div1.id = "div1"; >+ doc.body.appendChild(div1); >+ var div2 = doc.createElement('div'); >+ div1.appendChild(div2); >+ var div3 = doc.createElement('div'); >+ div2.appendChild(div3); >+ var div4 = doc.createElement('div'); >+ div3.appendChild(div4); >+ var div5 = doc.createElement('div'); >+ div4.appendChild(div5); >+ var div6 = doc.createElement('div'); >+ div5.appendChild(div6); >+ var match = add("#div1 > div div > div"); >+ expect(div1, 0, "failure 27"); >+ expect(div2, 0, "failure 28"); >+ expect(div3, 0, "failure 29"); >+ expect(div4, match, "failure 30"); >+ expect(div5, match, "failure 31"); >+ expect(div6, match, "failure 32"); >+ var p23 = doc.createElement('p'); >+ div2.insertBefore(p23, div3); >+ p23.insertBefore(div3, null); >+ expect(div1, 0, "failure 33"); >+ expect(div2, 0, "failure 34"); >+ expect(div3, 0, "failure 35"); >+ expect(p23, 0, "failure 36"); >+ expect(div4, match, "failure 37"); >+ expect(div5, match, "failure 38"); >+ expect(div6, match, "failure 39"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 43: :enabled, :disabled, :checked, etc >+ selectorTest(function (doc, add, expect) { >+ var input = doc.createElement('input'); >+ input.type = 'checkbox'; >+ doc.body.appendChild(input); >+ var neither = 0; >+ var both = add(":checked:enabled"); >+ var checked = add(":checked"); >+ var enabled = add(":enabled"); >+ expect(doc.body, neither, "control failure"); >+ expect(input, enabled, "input element didn't match :enabled"); >+ input.click(); >+ expect(input, both, "input element didn't match :checked"); >+ input.disabled = true; >+ expect(input, checked, "failure 3"); >+ input.checked = false; >+ expect(input, neither, "failure 4"); >+ expect(doc.body, neither, "failure 5"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ var input1 = doc.createElement('input'); >+ input1.type = 'radio'; >+ input1.name = 'radio'; >+ doc.body.appendChild(input1); >+ var input2 = doc.createElement('input'); >+ input2.type = 'radio'; >+ input2.name = 'radio'; >+ doc.body.appendChild(input2); >+ var checked = add(":checked"); >+ expect(input1, 0, "failure 6"); >+ expect(input2, 0, "failure 7"); >+ input2.click(); >+ expect(input1, 0, "failure 6"); >+ expect(input2, checked, "failure 7"); >+ input1.checked = true; >+ expect(input1, checked, "failure 8"); >+ expect(input2, 0, "failure 9"); >+ input2.setAttribute("checked", "checked"); // sets defaultChecked, doesn't change actual state >+ expect(input1, checked, "failure 10"); >+ expect(input2, 0, "failure 11"); >+ input1.type = "text"; >+ expect(input1, 0, "text field matched :checked"); >+ }); >+ selectorTest(function (doc, add, expect) { >+ var input = doc.createElement('input'); >+ input.type = 'button'; >+ doc.body.appendChild(input); >+ var neither = 0; >+ var enabled = add(":enabled"); >+ var disabled = add(":disabled"); >+ add(":enabled:disabled"); >+ expect(input, enabled, "failure 12"); >+ input.disabled = true; >+ expect(input, disabled, "failure 13"); >+ input.removeAttribute("disabled"); >+ expect(input, enabled, "failure 14"); >+ expect(doc.body, neither, "failure 15"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 44: selectors without spaces before a "*" >+ selectorTest(function (doc, add, expect) { >+ doc.body.className = "test"; >+ var p = doc.createElement('p'); >+ p.className = "test"; >+ doc.body.appendChild(p); >+ add("html*.test"); >+ expect(doc.body, 0, "misparsed selectors"); >+ expect(p, 0, "really misparsed selectors"); >+ }); >+ return 3; >+ }, >+ function () { >+ // test 45: cssFloat and the style attribute >+ assert(!document.body.style.cssFloat, "body has floatation"); >+ document.body.setAttribute("style", "float: right"); >+ assertEquals(document.body.style.cssFloat, "right", "body doesn't have floatation"); >+ document.body.setAttribute("style", "float: none"); >+ assertEquals(document.body.style.cssFloat, "none", "body didn't lose floatation"); >+ return 3; >+ }, >+ function () { >+ // test 46: media queries >+ var doc = getTestDocument(); >+ var style = doc.createElement('style'); >+ style.setAttribute('type', 'text/css'); >+ style.appendChild(doc.createTextNode('@media all and (min-color: 0) { #a { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media not all and (min-color: 0) { #b { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media only all and (min-color: 0) { #c { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media (bogus) { #d { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all and (bogus) { #e { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media not all and (bogus) { #f { text-transform: uppercase; } }')); // commentd out but should not match >+ style.appendChild(doc.createTextNode('@media only all and (bogus) { #g { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media (bogus), all { #h { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all and (bogus), all { #i { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media not all and (bogus), all { #j { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media only all and (bogus), all { #k { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all, (bogus) { #l { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all, all and (bogus) { #m { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all, not all and (bogus) { #n { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all, only all and (bogus) { #o { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all and color { #p { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all and min-color: 0 { #q { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all, all and color { #r { text-transform: uppercase; } }')); // commented out but should match >+ style.appendChild(doc.createTextNode('@media all, all and min-color: 0 { #s { text-transform: uppercase; } }')); // commented out but should match >+ style.appendChild(doc.createTextNode('@media all and min-color: 0, all { #t { text-transform: uppercase; } }')); // commented out but should match >+ style.appendChild(doc.createTextNode('@media (max-color: 0) and (max-monochrome: 0) { #u { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media (min-color: 1), (min-monochrome: 1) { #v { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all and (min-color: 0) and (min-monochrome: 0) { #w { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media not all and (min-color: 1), not all and (min-monochrome: 1) { #x { text-transform: uppercase; } }')); // matches >+ style.appendChild(doc.createTextNode('@media all and (min-height: 1em) and (min-width: 1em) { #y1 { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all and (max-height: 1em) and (min-width: 1em) { #y2 { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all and (min-height: 1em) and (max-width: 1em) { #y3 { text-transform: uppercase; } }')); >+ style.appendChild(doc.createTextNode('@media all and (max-height: 1em) and (max-width: 1em) { #y4 { text-transform: uppercase; } }')); // matches >+ doc.getElementsByTagName('head')[0].appendChild(style); >+ var names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y1', 'y2', 'y3', 'y4']; >+ for (var i in names) { >+ var p = doc.createElement('p'); >+ p.id = names[i]; >+ doc.body.appendChild(p); >+ } >+ var count = 0; >+ var check = function (c, e) { >+ count += 1; >+ var p = doc.getElementById(c); >+ assertEquals(doc.defaultView.getComputedStyle(p, '').textTransform, e ? 'uppercase' : 'none', "case " + c + " failed (index " + count + ")"); >+ } >+ check('a', true); // 1 >+ check('b', false); >+ check('c', true); >+ check('d', false); >+ check('e', false); >+/* COMMENTED OUT BECAUSE THE CSSWG KEEP CHANGING THE RIGHT ANSWER FOR THIS CASE >+ * check('f', false); >+ */ >+ check('g', false); >+ check('h', true); >+ check('i', true); >+ check('j', true); // 10 >+ check('k', true); >+ check('l', true); >+ check('m', true); >+ check('n', true); >+ check('o', true); >+ check('p', false); >+ check('q', false); >+/* COMMENTED OUT BECAUSE THE CSSWG KEEP CHANGING THE RIGHT ANSWER FOR THESE TOO APPARENTLY >+ * check('r', true); >+ * check('s', true); >+ * check('t', true); // 20 >+ */ >+ check('u', false); >+ check('v', true); >+ check('w', true); >+ check('x', true); >+ // here the viewport is 0x0 >+ check('y1', false); // 25 >+ check('y2', false); >+ check('y3', false); >+ check('y4', true); >+ document.getElementById("selectors").setAttribute("style", "height: 100px; width: 100px"); >+ // now the viewport is more than 1em by 1em >+ check('y1', true); // 29 >+ check('y2', false); >+ check('y3', false); >+ check('y4', false); >+ document.getElementById("selectors").removeAttribute("style"); >+ // here the viewport is 0x0 again >+ check('y1', false); // 33 >+ check('y2', false); >+ check('y3', false); >+ check('y4', true); >+ return 3; >+ }, >+ function () { >+ // test 47: 'cursor' and CSS3 values >+ var doc = getTestDocument(); >+ var style = doc.createElement('style'); >+ style.setAttribute('type', 'text/css'); >+ var cursors = ['auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait', 'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop', 'not-allowed', 'e-resize', 'n-resize', 'ne-resize', 'nw-resize', 's-resize', 'se-resize', 'sw-resize', 'w-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'col-resize', 'row-resize', 'all-scroll']; >+ for (var i in cursors) { >+ var c = cursors[i]; >+ style.appendChild(doc.createTextNode('#' + c + ' { cursor: ' + c + '; }')); >+ } >+ style.appendChild(doc.createTextNode('#bogus { cursor: bogus; }')); >+ doc.body.previousSibling.appendChild(style); >+ doc.body.id = "bogus"; >+ assertEquals(doc.defaultView.getComputedStyle(doc.body, '').cursor, "auto", "control failed"); >+ for (var i in cursors) { >+ var c = cursors[i]; >+ doc.body.id = c; >+ assertEquals(doc.defaultView.getComputedStyle(doc.body, '').cursor, c, "cursor " + c + " not supported"); >+ } >+ return 3; >+ }, >+ function () { >+ // test 48: :link and :visited >+ var iframe = document.getElementById("selectors"); >+ var number = (new Date()).valueOf(); >+ var a = document.createElement('a'); >+ a.appendChild(document.createTextNode('YOU SHOULD NOT SEE THIS AT ALL')); // changed text when fixing http://dbaron.org/mozilla/visited-privacy >+ a.setAttribute('id', 'linktest'); >+ a.setAttribute('class', 'pending'); >+ a.setAttribute('href', iframe.getAttribute('src') + "?" + number); >+ document.getElementsByTagName('map')[0].appendChild(a); >+ iframe.setAttribute("onload", "document.getElementById('linktest').removeAttribute('class')"); >+ iframe.src = a.getAttribute("href"); >+ return 3; >+ }, >+ >+ // bucket 4: HTML and the DOM >+ // Tables >+ function () { >+ // test 49: basic table accessor ping test create*, delete*, and * >+ // where * is caption, tHead, tFoot. >+ var table = document.createElement('table'); >+ assert(!table.caption, "initially: caption"); >+ assert(table.tBodies, "initially: tBodies"); >+ assertEquals(table.tBodies.length, 0, "initially: tBodies.length"); >+ assert(table.rows, "initially: rows"); >+ assertEquals(table.rows.length, 0, "initially: rows.length"); >+ assert(!table.tFoot, "initially: tFoot"); >+ assert(!table.tHead, "initially: tHead"); >+ var caption = table.createCaption(); >+ var thead = table.createTHead(); >+ var tfoot = table.createTFoot(); >+ assertEquals(table.caption, caption, "after creation: caption"); >+ assert(table.tBodies, "after creation: tBodies"); >+ assertEquals(table.tBodies.length, 0, "after creation: tBodies.length"); >+ assert(table.rows, "after creation: rows"); >+ assertEquals(table.rows.length, 0, "after creation: rows.length"); >+ assertEquals(table.tFoot, tfoot, "after creation: tFoot"); >+ assertEquals(table.tHead, thead, "after creation: tHead"); >+ assertEquals(table.childNodes.length, 3, "after creation: childNodes.length"); >+ table.caption = caption; // no-op >+ table.tHead = thead; // no-op >+ table.tFoot = tfoot; // no-op >+ assertEquals(table.caption, caption, "after setting: caption"); >+ assert(table.tBodies, "after setting: tBodies"); >+ assertEquals(table.tBodies.length, 0, "after setting: tBodies.length"); >+ assert(table.rows, "after setting: rows"); >+ assertEquals(table.rows.length, 0, "after setting: rows.length"); >+ assertEquals(table.tFoot, tfoot, "after setting: tFoot"); >+ assertEquals(table.tHead, thead, "after setting: tHead"); >+ assertEquals(table.childNodes.length, 3, "after setting: childNodes.length"); >+ table.deleteCaption(); >+ table.deleteTHead(); >+ table.deleteTFoot(); >+ assert(!table.caption, "after deletion: caption"); >+ assert(table.tBodies, "after deletion: tBodies"); >+ assertEquals(table.tBodies.length, 0, "after deletion: tBodies.length"); >+ assert(table.rows, "after deletion: rows"); >+ assertEquals(table.rows.length, 0, "after deletion: rows.length"); >+ assert(!table.tFoot, "after deletion: tFoot"); >+ assert(!table.tHead, "after deletion: tHead"); >+ assert(!table.hasChildNodes(), "after deletion: hasChildNodes()"); >+ assertEquals(table.childNodes.length, 0, "after deletion: childNodes.length"); >+ return 4; >+ }, >+ function () { >+ // test 50: construct a table, and see if the table is as expected >+ var table = document.createElement('table'); >+ table.appendChild(document.createElement('tbody')); >+ var tr1 = document.createElement('tr'); >+ table.appendChild(tr1); >+ table.appendChild(document.createElement('caption')); >+ table.appendChild(document.createElement('thead')); >+ // <table><tbody/><tr/><caption/><thead/> >+ table.insertBefore(table.firstChild.nextSibling, null); // move the <tr/> to the end >+ // <table><tbody/><caption/><thead/><tr/> >+ table.replaceChild(table.firstChild, table.lastChild); // move the <tbody/> to the end and remove the <tr> >+ // <table><caption/><thead/><tbody/> >+ var tr2 = table.tBodies[0].insertRow(0); >+ // <table><caption/><thead/><tbody><tr/><\tbody> (the '\' is to avoid validation errors) >+ assertEquals(table.tBodies[0].rows[0].rowIndex, 0, "rowIndex broken"); >+ assertEquals(table.tBodies[0].rows[0].sectionRowIndex, 0, "sectionRowIndex broken"); >+ assertEquals(table.childNodes.length, 3, "wrong number of children"); >+ assert(table.caption, "caption broken"); >+ assert(table.tHead, "tHead broken"); >+ assert(!table.tFoot, "tFoot broken"); >+ assertEquals(table.tBodies.length, 1, "wrong number of tBodies"); >+ assertEquals(table.rows.length, 1, "wrong number of rows"); >+ assert(!tr1.parentNode, "orphan row has unexpected parent"); >+ assertEquals(table.caption, table.createCaption(), "caption creation failed"); >+ assertEquals(table.tFoot, null, "table has unexpected footer"); >+ assertEquals(table.tHead, table.createTHead(), "header creation failed"); >+ assertEquals(table.createTFoot(), table.tFoot, "footer creation failed"); >+ // either: <table><caption/><thead/><tbody><tr/><\tbody><tfoot/> >+ // or: <table><caption/><thead/><tfoot/><tbody><tr/><\tbody> >+ table.tHead.appendChild(tr1); >+ // either: <table><caption/><thead><tr/><\thead><tbody><tr/><\tbody><tfoot/> >+ // or: <table><caption/><thead><tr/><\thead><tfoot/><tbody><tr/><\tbody> >+ assertEquals(table.rows[0], table.tHead.firstChild, "top row not in expected position"); >+ assertEquals(table.rows.length, 2, "wrong number of rows after appending one"); >+ assertEquals(table.rows[1], table.tBodies[0].firstChild, "second row not in expected position"); >+ return 4; >+ }, >+ function () { >+ // test 51: test the ordering and creation of rows >+ var table = document.createElement('table'); >+ var rows = [ >+ document.createElement('tr'), // 0: ends up first child of the tfoot >+ document.createElement('tr'), // 1: goes at the end of the table >+ document.createElement('tr'), // 2: becomes second child of thead >+ document.createElement('tr'), // 3: becomes third child of the thead >+ document.createElement('tr'), // 4: not in the table >+ table.insertRow(0), // 5: not in the table >+ table.createTFoot().insertRow(0) // 6: ends up second in the tfoot >+ ]; >+ rows[6].parentNode.appendChild(rows[0]); >+ table.appendChild(rows[1]); >+ table.insertBefore(document.createElement('thead'), table.firstChild); >+ table.firstChild.appendChild(rows[2]); >+ rows[2].parentNode.appendChild(rows[3]); >+ rows[4].appendChild(rows[5].parentNode); >+ table.insertRow(0); >+ table.tFoot.appendChild(rows[6]); >+ assertEquals(table.rows.length, 6, "wrong number of rows"); >+ assertEquals(table.getElementsByTagName('tr').length, 6, "wrong number of tr elements"); >+ assertEquals(table.childNodes.length, 3, "table has wrong number of children"); >+ assertEquals(table.childNodes[0], table.tHead, "tHead isn't first"); >+ assertEquals(table.getElementsByTagName('tr')[0], table.tHead.childNodes[0], "first tr isn't in tHead correctly"); >+ assertEquals(table.getElementsByTagName('tr')[1], table.tHead.childNodes[1], "second tr isn't in tHead correctly"); >+ assertEquals(table.getElementsByTagName('tr')[1], rows[2], "second tr is the wrong row"); >+ assertEquals(table.getElementsByTagName('tr')[2], table.tHead.childNodes[2], "third tr isn't in tHead correctly"); >+ assertEquals(table.getElementsByTagName('tr')[2], rows[3], "third tr is the wrong row"); >+ assertEquals(table.childNodes[1], table.tFoot, "tFoot isn't second"); >+ assertEquals(table.getElementsByTagName('tr')[3], table.tFoot.childNodes[0], "fourth tr isn't in tFoot correctly"); >+ assertEquals(table.getElementsByTagName('tr')[3], rows[0], "fourth tr is the wrong row"); >+ assertEquals(table.getElementsByTagName('tr')[4], table.tFoot.childNodes[1], "fifth tr isn't in tFoot correctly"); >+ assertEquals(table.getElementsByTagName('tr')[4], rows[6], "fifth tr is the wrong row"); >+ assertEquals(table.getElementsByTagName('tr')[5], table.childNodes[2], "sixth tr isn't in tFoot correctly"); >+ assertEquals(table.getElementsByTagName('tr')[5], rows[1], "sixth tr is the wrong row"); >+ assertEquals(table.tBodies.length, 0, "non-zero number of tBodies"); >+ return 4; >+ }, >+ >+ // Forms >+ function () { >+ // test 52: <form> and .elements >+ test = document.getElementsByTagName('form')[0]; >+ assert(test.elements !== test, "form.elements === form"); >+ assert(test.elements !== test.getAttribute('elements'), "form element has an elements content attribute"); >+ assertEquals(test.elements.length, 1, "form element has unexpected number of controls"); >+ assertEquals(test.elements.length, test.length, "form element has inconsistent numbers of controls"); >+ return 4; >+ }, >+ function () { >+ // test 53: changing an <input> dynamically >+ var f = document.createElement('form'); >+ var i = document.createElement('input'); >+ i.name = 'first'; >+ i.type = 'text'; >+ i.value = 'test'; >+ f.appendChild(i); >+ assertEquals(i.getAttribute('name'), 'first', "name attribute wrong"); >+ assertEquals(i.name, 'first', "name property wrong"); >+ assertEquals(i.getAttribute('type'), 'text', "type attribute wrong"); >+ assertEquals(i.type, 'text', "type property wrong"); >+ assert(!i.hasAttribute('value'), "value attribute wrong"); >+ assertEquals(i.value, 'test', "value property wrong"); >+ assertEquals(f.elements.length, 1, "form's elements array has wrong size"); >+ assertEquals(f.elements[0], i, "form's element array doesn't have input control by index"); >+ assertEquals(f.elements.first, i, "form's element array doesn't have input control by name"); >+ assertEquals(f.elements.second, null, "form's element array has unexpected controls by name"); >+ i.name = 'second'; >+ i.type = 'password'; >+ i.value = 'TEST'; >+ assertEquals(i.getAttribute('name'), 'second', "name attribute wrong after change"); >+ assertEquals(i.name, 'second', "name property wrong after change"); >+ assertEquals(i.getAttribute('type'), 'password', "type attribute wrong after change"); >+ assertEquals(i.type, 'password', "type property wrong after change"); >+ assert(!i.hasAttribute('value'), "value attribute wrong after change"); >+ assertEquals(i.value, 'TEST', "value property wrong after change"); >+ assertEquals(f.elements.length, 1, "form's elements array has wrong size after change"); >+ assertEquals(f.elements[0], i, "form's element array doesn't have input control by index after change"); >+ assertEquals(f.elements.second, i, "form's element array doesn't have input control by name after change"); >+ assertEquals(f.elements.first, null, "form's element array has unexpected controls by name after change"); >+ return 4; >+ }, >+ function () { >+ // test 54: changing a parsed <input> >+ var i = document.getElementsByTagName('input')[0]; >+ // initial values >+ assertEquals(i.getAttribute('type'), 'HIDDEN', "input control's type content attribute was wrong"); >+ assertEquals(i.type, 'hidden', "input control's type DOM attribute was wrong"); >+ // change values >+ i.name = 'test'; >+ assertEquals(i.parentNode.elements.test, i, "input control's form didn't update"); >+ // check event handlers >+ i.parentNode.action = 'javascript:'; >+ var called = false; >+ i.parentNode.onsubmit = function (arg) { >+ arg.preventDefault(); >+ called = true; >+ }; >+ i.type = 'submit'; >+ i.click(); // synchronously dispatches a click event to the submit button, which submits the form, which calls onsubmit >+ assert(called, "click handler didn't dispatch properly"); >+ i.type = 'hIdDeN'; >+ // check numeric attributes >+ i.setAttribute('maxLength', '2'); >+ var s = i.getAttribute('maxLength'); >+ assert(s.match, "attribute is not a String"); >+ assert(!s.MIN_VALUE, "attribute is a Number"); >+ return 4; >+ }, >+ function () { >+ // test 55: moved checkboxes should keep their state >+ var container = document.getElementsByTagName("iframe")[0]; >+ var input1 = document.createElement('input'); >+ container.appendChild(input1); >+ input1.type = "checkbox"; >+ input1.checked = true; >+ assert(input1.checked, "checkbox not checked after being checked (inserted first)"); >+ var input2 = document.createElement('input'); >+ input2.type = "checkbox"; >+ container.appendChild(input2); >+ input2.checked = true; >+ assert(input2.checked, "checkbox not checked after being checked (inserted after type set)"); >+ var input3 = document.createElement('input'); >+ input3.type = "checkbox"; >+ input3.checked = true; >+ container.appendChild(input3); >+ assert(input3.checked, "checkbox not checked after being checked (inserted after being checked)"); >+ var target = document.getElementsByTagName("iframe")[1]; >+ target.appendChild(input1); >+ target.appendChild(input2); >+ target.appendChild(input3); >+ assert(input1.checked, "checkbox 1 not checked after being moved"); >+ assert(input2.checked, "checkbox 2 not checked after being moved"); >+ assert(input3.checked, "checkbox 3 not checked after being moved"); >+ return 4; >+ }, >+ function () { >+ // test 56: cloned radio buttons should keep their state >+ var form = document.getElementsByTagName("form")[0]; >+ var input1 = document.createElement('input'); >+ input1.type = "radio"; >+ input1.name = "radioGroup1"; >+ form.appendChild(input1); >+ var input2 = input1.cloneNode(true); >+ input1.parentNode.appendChild(input2); >+ input1.checked = true; >+ assert(form.elements.radioGroup1, "radio group absent"); >+ assert(input1.checked, "first radio button not checked"); >+ assert(!input2.checked, "second radio button checked"); >+ input2.checked = true; >+ assert(!input1.checked, "first radio button checked"); >+ assert(input2.checked, "second radio button not checked"); >+ var input3 = document.createElement('input'); >+ input3.type = "radio"; >+ input3.name = "radioGroup2"; >+ form.appendChild(input3); >+ assert(!input3.checked, "third radio button checked"); >+ input3.checked = true; >+ assert(!input1.checked, "first radio button newly checked"); >+ assert(input2.checked, "second radio button newly not checked"); >+ assert(input3.checked, "third radio button not checked"); >+ input1.checked = true; >+ assert(input1.checked, "first radio button ended up not checked"); >+ assert(!input2.checked, "second radio button ended up checked"); >+ assert(input3.checked, "third radio button ended up not checked"); >+ input1.parentNode.removeChild(input1); >+ input2.parentNode.removeChild(input2); >+ input3.parentNode.removeChild(input3); >+ return 4; >+ }, >+ function () { >+ // test 57: HTMLSelectElement.add() >+ var s = document.createElement('select'); >+ var o = document.createElement('option'); >+ s.add(o, null); >+ assert(s.firstChild === o, "add() didn't add to firstChild"); >+ assertEquals(s.childNodes.length, 1, "add() didn't add to childNodes"); >+ assert(s.childNodes[0] === o, "add() didn't add to childNodes correctly"); >+ assertEquals(s.options.length, 1, "add() didn't add to options"); >+ assert(s.options[0] === o, "add() didn't add to options correctly"); >+ return 4; >+ }, >+ function () { >+ // test 58: HTMLOptionElement.defaultSelected >+ var s = document.createElement('select'); >+ var o1 = document.createElement('option'); >+ var o2 = document.createElement('option'); >+ o2.defaultSelected = true; >+ var o3 = document.createElement('option'); >+ s.appendChild(o1); >+ s.appendChild(o2); >+ s.appendChild(o3); >+ assert(s.options[s.selectedIndex] === o2, "defaultSelected didn't take"); >+ return 4; >+ }, >+ function () { >+ // test 59: attributes of <button> elements >+ var button = document.createElement('button'); >+ assertEquals(button.type, "submit", "<button> doesn't have type=submit"); >+ button.setAttribute("type", "button"); >+ assertEquals(button.type, "button", "<button type=button> doesn't have type=button"); >+ button.removeAttribute("type"); >+ assertEquals(button.type, "submit", "<button> doesn't have type=submit back"); >+ button.setAttribute('value', 'apple'); >+ button.appendChild(document.createTextNode('banana')); >+ assertEquals(button.value, 'apple', "wrong button value"); >+ return 4; >+ }, >+ >+ // Misc DOM2 HTML >+ function () { >+ // test 60: className vs "class" vs attribute nodes >+ var span = document.getElementsByTagName('span')[0]; >+ span.setAttribute('class', 'kittens'); >+// COMMENTED OUT FOR 2011 UPDATE - turns out instead of dropping Attr entirely, as Acid3 originally expected, the API is just being refactored >+// if (!span.getAttributeNode) >+// return 4; // support for attribute nodes is optional in Acid3, because attribute nodes might be removed from DOM Core in the future. >+// var attr = span.getAttributeNode('class'); >+// // however, if they're supported, they'd better work: >+// assert(attr.specified, "attribute not specified"); >+// assertEquals(attr.value, 'kittens', "attribute value wrong"); >+// assertEquals(attr.name, 'class', "attribute name wrong"); >+// attr.value = 'ocelots'; >+// assertEquals(attr.value, 'ocelots', "attribute value wrong"); >+// assertEquals(span.className, 'ocelots', "setting attribute value failed to be reflected in className"); >+ span.className = 'cats'; >+// assertEquals(attr.ownerElement.getAttribute('class'), 'cats', "setting attribute value failed to be reflected in getAttribute()"); >+// span.removeAttributeNode(attr); >+// assert(attr.specified, "attribute not specified after removal"); >+// assert(!attr.ownerElement, "attribute still owned after removal"); >+// assert(!span.className, "element had class after removal"); >+ return 4; >+ }, >+ function () { >+ // test 61: className and the class attribute: space preservation >+ var p = document.createElement('p'); >+ assert(!p.hasAttribute('class'), "element had attribute on creation"); >+ p.setAttribute('class', ' te st '); >+ assert(p.hasAttribute('class'), "element did not have attribute after setting"); >+ assertEquals(p.getAttribute('class'), ' te st ', "class attribute's value was wrong"); >+ assertEquals(p.className, ' te st ', "className was wrong"); >+ p.className = p.className.replace(/ /g, '\n'); >+ assert(p.hasAttribute('class'), "element did not have attribute after replacement"); >+ assertEquals(p.getAttribute('class'), '\nte\n\nst\n', "class attribute's value was wrong after replacement"); >+ assertEquals(p.className, '\nte\n\nst\n', "className was wrong after replacement"); >+ p.className = ''; >+ assert(p.hasAttribute('class'), "element lost attribute after being set to empty string"); >+ assertEquals(p.getAttribute('class'), '', "class attribute's value was wrong after being emptied"); >+ assertEquals(p.className, '', "className was wrong after being emptied"); >+ return 4; >+ }, >+ function () { >+ // test 62: check that DOM attributes and content attributes aren't equivalent >+ var test; >+ // <div class=""> >+ test = document.getElementsByTagName('div')[0]; >+ assertEquals(test.className, 'buckets', "buckets: className wrong"); >+ assertEquals(test.getAttribute('class'), 'buckets', "buckets: class wrong"); >+ assert(!test.hasAttribute('className'), "buckets: element has className attribute"); >+ assert(test.className != test.getAttribute('className'), "buckets: className attribute equals className property"); >+ assert(!('class' in test), "buckets: element has class property") >+ test['class'] = "oil"; >+ assert(test.className != "oil", "buckets: class property affected className"); >+ // <label for=""> >+ test = document.createElement('label'); >+ test.htmlFor = 'jars'; >+ assertEquals(test.htmlFor, 'jars', "jars: htmlFor wrong"); >+ assertEquals(test.getAttribute('for'), 'jars', "jars: for wrong"); >+ assert(!test.hasAttribute('htmlFor'), "jars: element has htmlFor attribute"); >+ assert(test.htmlFor != test.getAttribute('htmlFor'), "jars: htmlFor attribute equals htmlFor property"); >+ test = document.createElement('label'); >+ test.setAttribute('for', 'pots'); >+ assertEquals(test.htmlFor, 'pots', "pots: htmlFor wrong"); >+ assertEquals(test.getAttribute('for'), 'pots', "pots: for wrong"); >+ assert(!test.hasAttribute('htmlFor'), "pots: element has htmlFor attribute"); >+ assert(test.htmlFor != test.getAttribute('htmlFor'), "pots: htmlFor attribute equals htmlFor property"); >+ assert(!('for' in test), "pots: element has for property"); >+ test['for'] = "oil"; >+ assert(test.htmlFor != "oil", "pots: for property affected htmlFor"); >+ // <meta http-equiv=""> >+ test = document.createElement('meta'); >+ test.setAttribute('http-equiv', 'boxes'); >+ assertEquals(test.httpEquiv, 'boxes', "boxes: httpEquiv wrong"); >+ assertEquals(test.getAttribute('http-equiv'), 'boxes', "boxes: http-equiv wrong"); >+ assert(!test.hasAttribute('httpEquiv'), "boxes: element has httpEquiv attribute"); >+ assert(test.httpEquiv != test.getAttribute('httpEquiv'), "boxes: httpEquiv attribute equals httpEquiv property"); >+ test = document.createElement('meta'); >+ test.httpEquiv = 'cans'; >+ assertEquals(test.httpEquiv, 'cans', "cans: httpEquiv wrong"); >+ assertEquals(test.getAttribute('http-equiv'), 'cans', "cans: http-equiv wrong"); >+ assert(!test.hasAttribute('httpEquiv'), "cans: element has httpEquiv attribute"); >+ assert(test.httpEquiv != test.getAttribute('httpEquiv'), "cans: httpEquiv attribute equals httpEquiv property"); >+ assert(!('http-equiv' in test), "cans: element has http-equiv property"); >+ test['http-equiv'] = "oil"; >+ assert(test.httpEquiv != "oil", "cans: http-equiv property affected httpEquiv"); >+ return 4; >+ }, >+ function () { >+ // test 63: attributes of the <area> element >+ var area = document.getElementsByTagName('area')[0]; >+ assertEquals(area.getAttribute('href'), '', "wrong value for href=''"); >+ assertEquals(area.getAttribute('shape'), 'rect', "wrong value for shape=''"); >+ assertEquals(area.getAttribute('coords'), '2,2,4,4', "wrong value for coords=''"); >+ assertEquals(area.getAttribute('alt'), '<\'>', "wrong value for alt=''"); >+ return 4; >+ }, >+ function () { >+ // test 64: more attribute tests >+ // attributes of the <object> element >+ var obj1 = document.createElement('object'); >+ obj1.setAttribute('data', 'test.html'); >+ var obj2 = document.createElement('object'); >+ obj2.setAttribute('data', './test.html'); >+ assertEquals(obj1.data, obj2.data, "object elements didn't resolve URIs correctly"); >+ assert(obj1.data.match(/^http:/), "object.data isn't absolute"); >+ obj1.appendChild(document.createElement('param')); >+ assertEquals(obj1.getElementsByTagName('param').length, 1, "object is missing its only child"); >+ // non-existent attributes >+ var test = document.createElement('p'); >+ assert(!('TWVvdywgbWV3Li4u' in test), "TWVvdywgbWV3Li4u unexpectedly found"); >+ assertEquals(test.TWVvdywgbWV3Li4u, undefined, ".TWVvdywgbWV3Li4u wasn't undefined"); >+ assertEquals(test['TWVvdywgbWV3Li4u'], undefined, "['TWVvdywgbWV3Li4u'] wasn't undefined"); >+ test.setAttribute('TWVvdywgbWV3Li4u', 'woof'); >+ assert(!('TWVvdywgbWV3Li4u' in test), "TWVvdywgbWV3Li4u unexpectedly found after setting"); >+ assertEquals(test.TWVvdywgbWV3Li4u, undefined, ".TWVvdywgbWV3Li4u wasn't undefined after setting"); >+ assertEquals(test['TWVvdywgbWV3Li4u'], undefined, "['TWVvdywgbWV3Li4u'] wasn't undefined after setting"); >+ assertEquals(test.getAttribute('TWVvdywgbWV3Li4u'), 'woof', "TWVvdywgbWV3Li4u has wrong value after setting"); >+ return 4; >+ }, >+ >+ // bucket 5: Tests from the Acid3 Competition >+ function () { >+ // test 65: bring in a couple of SVG files and some HTML files dynamically - preparation for later tests in this bucket >+ // NOTE FROM 2011 UPDATE: The svg.xml file still contains the SVG font, but it is no longer used >+ kungFuDeathGrip = document.createElement('p'); >+ kungFuDeathGrip.className = 'removed'; >+ var iframe, object; >+ // svg iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '1' }; >+ iframe.src = "svg.xml"; >+ kungFuDeathGrip.appendChild(iframe); >+ // object iframe >+ object = document.createElement('object'); >+ object.onload = function () { kungFuDeathGrip.title += '2' }; >+ object.data = "svg.xml"; >+ kungFuDeathGrip.appendChild(object); >+ // xml iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '3' }; >+ iframe.src = "empty.xml"; >+ kungFuDeathGrip.appendChild(iframe); >+ // html iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '4' }; >+ iframe.src = "empty.html"; >+ kungFuDeathGrip.appendChild(iframe); >+ // html iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '5' }; >+ iframe.src = "xhtml.1"; >+ kungFuDeathGrip.appendChild(iframe); >+ // html iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '6' }; >+ iframe.src = "xhtml.2"; >+ kungFuDeathGrip.appendChild(iframe); >+ // html iframe >+ iframe = document.createElement('iframe'); >+ iframe.onload = function () { kungFuDeathGrip.title += '7' }; >+ iframe.src = "xhtml.3"; >+ kungFuDeathGrip.appendChild(iframe); >+ // add the lot to the document >+ document.getElementsByTagName('map')[0].appendChild(kungFuDeathGrip); >+ return 5; >+ }, >+ function () { >+ // test 66: localName on text nodes (and now other things), from Sylvain Pasche >+ assertEquals(document.createTextNode("test").localName, null, 'wrong localName for text node'); >+ assertEquals(document.createComment("test").localName, null, 'wrong localName for comment node'); >+ assertEquals(document.localName, null, 'wrong localName for document node'); >+ return 5; >+ }, >+ function () { >+// COMMENTED OUT IN NOV 2013 BECAUSE DOM SPEC REMOVED THIS FEATURE >+// // test 67: removedNamedItemNS on missing attributes, from Sylvain Pasche >+// var p = document.createElement("p"); >+// var msg = 'wrong exception raised'; >+// try { >+// p.attributes.removeNamedItemNS("http://www.example.com/", "absent"); >+// msg = 'no exception raised'; >+// } catch (e) { >+// if ('code' in e) { >+// if (e.code == 8) >+// msg = ''; >+// else >+// msg += '; code = ' + e.code; >+// } >+// } >+// assert(msg == '', "when calling removeNamedItemNS in a non existent attribute: " + msg); >+ return 5; >+ }, >+ function () { >+ // test 68: UTF-16 surrogate pairs, from David Chan >+ // >+ // In The Unicode Standard 5.0, it is explicitly permitted to >+ // allow malformed UTF-16, that is, to leave the string alone. >+ // (http://www.unicode.org/versions/Unicode5.0.0): >+ // >+ // section 2.7: "...strings in ... ECMAScript are Unicode 16-bit >+ // strings, but are not necessarily well-formed UTF-16 >+ // sequences. In normal processing, it can be far more >+ // efficient to allow such strings to contain code unit >+ // sequences that are not well-formed UTF-16 -- that is, >+ // isolated surrogates" >+ // >+ // On the other hand, if the application wishes to ensure >+ // well-formed character sequences, it may not permit the >+ // malformed sequence and it must regard the first codepoint as >+ // an error: >+ // >+ // Section 3.2: "C10. When a process interprets a code sequence >+ // which purports to be in a Unicode character encoding form, it >+ // shall treat ill-formed code unit sequences as an error >+ // condition and shall not interpret such sequences as >+ // characters. >+ // [...] >+ // For example, in UTF-8 every code unit of the form 110....2 >+ // must be followed by a code unit of the form 10......2. A >+ // sequence such as 110.....2 0.......2 is ill-formed and must >+ // never be generated. When faced with this ill-formed code unit >+ // sequence while transforming or interpreting text, a >+ // conformant process must treat the first code unit 110.....2 >+ // as an illegally terminated code unit sequence~Wfor example, >+ // by signaling an error, filtering the code unit out, or >+ // representing the code unit with a marker such as U+FFFD >+ // replacement character." >+ // >+ // So it would be permitted to do any of the following: >+ // 1) Leave the string alone >+ // 2) Remove the unpaired surrogate >+ // 3) Replace the unpaired surrogate with U+FFFD >+ // 4) Throw an exception >+ >+ try { >+ var unpaired = String.fromCharCode(0xd863); // half a surrogate pair >+ var before = unpaired + "text"; >+ var elt = document.createElement("input"); >+ elt.value = before; >+ var after = elt.value; >+ } >+ catch(ex) { >+ return 5; // Unpaired surrogate caused an exception - ok >+ } >+ if (after == before && before.length == 5) >+ return 5; // Unpaired surrogate kept - ok >+ if (after == "text") >+ return 5; // Unpaired surrogate removed - ok >+ var replacement = String.fromCharCode(0xfffd); >+ if (after == replacement + "text") >+ return 5; // Unpaired surrogate replaced - ok >+ fail("Unpaired surrogate handled wrongly (input was '" + before + "', output was '" + after + "')"); >+ }, >+ function () { >+ // test 69: check that the support files loaded -- preparation for the rest of the tests in this bucket >+ assert(!(kungFuDeathGrip == null), "kungFuDeathGrip was null"); >+ assert(!(kungFuDeathGrip.title == null), "kungFuDeathGrip.title was null"); >+ if (kungFuDeathGrip.title.length < 7) >+ return "retry"; >+ assert(!(kungFuDeathGrip.firstChild == null), "kungFuDeathGrip.firstChild was null"); >+ assert(!(kungFuDeathGrip.firstChild.contentDocument == null), "kungFuDeathGrip.firstChild.contentDocument was null"); >+ assert(!(kungFuDeathGrip.firstChild.contentDocument.getElementsByTagName == null), "kungFuDeathGrip.firstChild.contentDocument.getElementsByTagName was null"); >+ var t = kungFuDeathGrip.firstChild.contentDocument.getElementsByTagName('text')[0]; >+ assert(!(t == null), "t was null"); >+ assert(!(t.parentNode == null), "t.parentNode was null"); >+ assert(!(t.parentNode.removeChild == null), "t.parentNode.removeChild was null"); >+ t.parentNode.removeChild(t); >+ return 5; >+ }, >+ function () { >+ // test 70: XML encoding test >+ // the third child in kungFuDeathGrip is an ISO-8859-1 document sent as UTF-8. >+ // q.v. XML 1.0, section 4.3.3 Character Encoding in Entities >+ // this only tests one of a large number of conditions that should cause fatal errors >+ var doc = kungFuDeathGrip.childNodes[2].contentDocument; >+ if (!doc) >+ return 5; >+ if (doc.documentElement.tagName != "root") >+ return 5; >+ if (doc.documentElement.getElementsByTagName('test').length < 1) >+ return 5; >+ fail("UTF-8 encoded XML document with invalid character did not have a well-formedness error"); >+ }, >+ function () { >+ // test 71: HTML parsing, from Simon Pieters and Anne van Kesteren >+ var doc = kungFuDeathGrip.childNodes[3].contentDocument; >+ assert(doc, "missing document for test"); >+ try { >+ // siblings >+ doc.open(); >+ doc.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><title><\/title><span><\/span><script type=\"text/javascript\"><\/script>"); >+ doc.close(); >+ assertEquals(doc.childNodes.length, 2, "wrong number of children in #document (first test)"); >+ assertEquals(doc.firstChild.name.toUpperCase(), "HTML", "name wrong (first test)"); // changed 2009-08-13 to add .toUpperCase() for HTML5 compat >+ assertEquals(doc.firstChild.publicId, "-//W3C//DTD HTML 4.0 Transitional//EN", "publicId wrong (first test)"); >+ if ((doc.firstChild.systemId != null) && (doc.firstChild.systemId != "")) >+ fail("systemId wrong (first test)"); >+ if (('internalSubset' in doc.firstChild) || doc.firstChild.internalSubset) >+ assertEquals(doc.firstChild.internalSubset, null, "internalSubset wrong (first test)"); >+ assertEquals(doc.documentElement.childNodes.length, 2, "wrong number of children in HTML (first test)"); >+ assertEquals(doc.documentElement.firstChild.nodeName, "HEAD", "misplaced HEAD element (first test)"); >+ assertEquals(doc.documentElement.firstChild.childNodes.length, 1, "wrong number of children in HEAD (first test)"); >+ assertEquals(doc.documentElement.firstChild.firstChild.tagName, "TITLE", "misplaced TITLE element (first test)"); >+ assertEquals(doc.documentElement.lastChild.nodeName, "BODY", "misplaced BODY element (first test)"); >+ assertEquals(doc.documentElement.lastChild.childNodes.length, 2, "wrong number of children in BODY (first test)"); >+ assertEquals(doc.documentElement.lastChild.firstChild.tagName, "SPAN", "misplaced SPAN element (first test)"); >+ assertEquals(doc.documentElement.lastChild.lastChild.tagName, "SCRIPT", "misplaced SCRIPT element (first test)"); >+ // parent/child >+ doc.open(); >+ doc.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"><title><\/title><span><script type=\"text/javascript\"><\/script><\/span>"); >+ doc.close(); >+ assertEquals(doc.childNodes.length, 2, "wrong number of children in #document (second test)"); >+ assertEquals(doc.firstChild.name.toUpperCase(), "HTML", "name wrong (second test)"); // changed 2009-08-13 to add .toUpperCase() for HTML5 compat >+ assertEquals(doc.firstChild.publicId, "-//W3C//DTD HTML 4.01 Transitional//EN", "publicId wrong (second test)"); >+ assertEquals(doc.firstChild.systemId, "http://www.w3.org/TR/html4/loose.dtd", "systemId wrong (second test)"); >+ if (('internalSubset' in doc.firstChild) || doc.firstChild.internalSubset) >+ assertEquals(doc.firstChild.internalSubset, null, "internalSubset wrong (second test)"); >+ assertEquals(doc.documentElement.childNodes.length, 2, "wrong number of children in HTML (second test)"); >+ assertEquals(doc.documentElement.firstChild.nodeName, "HEAD", "misplaced HEAD element (second test)"); >+ assertEquals(doc.documentElement.firstChild.childNodes.length, 1, "wrong number of children in HEAD (second test)"); >+ assertEquals(doc.documentElement.firstChild.firstChild.tagName, "TITLE", "misplaced TITLE element (second test)"); >+ assertEquals(doc.documentElement.lastChild.nodeName, "BODY", "misplaced BODY element (second test)"); >+ assertEquals(doc.documentElement.lastChild.childNodes.length, 1, "wrong number of children in BODY (second test)"); >+ assertEquals(doc.documentElement.lastChild.firstChild.tagName, "SPAN", "misplaced SPAN element (second test)"); >+ assertEquals(doc.documentElement.lastChild.firstChild.firstChild.tagName, "SCRIPT", "misplaced SCRIPT element (second test)"); >+ } finally { >+ // prepare the file for the next test >+ doc.open(); >+ doc.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"><head><title><\/title><style type=\"text/css\">img { height: 10px; }<\/style><body><p><img src=\"data:image/gif;base64,R0lGODlhAQABAID%2FAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D\" alt=\"\">"); >+ doc.close(); >+ } >+ return 5; >+ }, >+ function () { >+ // test 72: dynamic modification of <style> blocks' text nodes, from Jonas Sicking and Garret Smith >+ var doc = kungFuDeathGrip.childNodes[3].contentDocument; >+ assert(doc, "missing document for test"); >+ assert(doc.images[0], "prerequisite failed: no image"); >+ assertEquals(doc.images[0].height, 10, "prerequisite failed: style didn't affect image"); >+ doc.styleSheets[0].ownerNode.firstChild.data = "img { height: 20px; }"; >+ assertEquals(doc.images[0].height, 20, "change failed to take effect"); >+ doc.styleSheets[0].ownerNode.appendChild(doc.createTextNode("img { height: 30px; }")); >+ assertEquals(doc.images[0].height, 30, "append failed to take effect"); >+ var rules = doc.styleSheets[0].cssRules; // "All CSS objects in the DOM are "live"" says section 2.1, Overview of the DOM Level 2 CSS Interfaces >+ doc.styleSheets[0].insertRule("img { height: 40px; }", 2); >+ assertEquals(doc.images[0].height, 40, "insertRule failed to take effect"); >+ assertEquals(doc.styleSheets[0].cssRules.length, 3, "count of rules is wrong"); >+ assertEquals(rules.length, 3, "cssRules isn't live"); >+ // while we're at it, check some other things on doc.styleSheets: >+ assert(doc.styleSheets[0].href === null, "internal stylesheet had a URI: " + doc.styleSheets[0].href); >+ assert(document.styleSheets[0].href === null, "internal acid3 stylesheet had a URI: " + document.styleSheets[0].href); >+ return 5; >+ }, >+ function () { >+ // test 73: nested events, from Jonas Sicking >+ var doc = kungFuDeathGrip.childNodes[3].contentDocument; >+ // implied events >+ var up = 0; >+ var down = 0; >+ var button = doc.createElement("button"); >+ button.type = "button"; >+ button.onclick = function () { up += 1; if (up < 10) button.click(); down += up; }; // not called >+ button.addEventListener('test', function () { up += 1; var e = doc.createEvent("HTMLEvents"); e.initEvent('test', false, false); if (up < 20) button.dispatchEvent(e); down += up; }, false); >+ var evt = doc.createEvent("HTMLEvents"); >+ evt.initEvent('test', false, false); >+ button.dispatchEvent(evt); >+ assertEquals(up, 20, "test event handler called the wrong number of times"); >+ assertEquals(down, 400, "test event handler called in the wrong order"); >+ return 5; >+ }, >+ function () { >+ // test 74: check getSVGDocument(), from Erik Dahlstrom >+ // GetSVGDocument[6]: "In the case where an SVG document is >+ // embedded by reference, such as when an XHTML document has an >+ // 'object' element whose href (or equivalent) attribute >+ // references an SVG document (i.e., a document whose MIME type >+ // is "image/svg+xml" and whose root element is thus an 'svg' >+ // element), the SVG user agent is required to implement the >+ // GetSVGDocument interface for the element which references the >+ // SVG document (e.g., the HTML 'object' or comparable >+ // referencing elements)." >+ // >+ // [6] http://www.w3.org/TR/SVG11/struct.html#InterfaceGetSVGDocument >+ // >+ // iframe >+ var iframe = kungFuDeathGrip.childNodes[0]; >+ assert(iframe, "Failed finding svg iframe."); >+ assert(iframe.contentDocument, "contentDocument failed for <iframe> referencing an svg document."); >+ if (!iframe.getSVGDocument) >+ fail("getSVGDocument missing on <iframe> element."); >+ assert(iframe.getSVGDocument(), "getSVGDocument failed for <iframe> referencing an svg document."); >+ assert(iframe.getSVGDocument() == iframe.contentDocument, "Mismatch between getSVGDocument and contentDocument #1."); >+ // object >+ var object = kungFuDeathGrip.childNodes[1]; >+ assert(object, "Failed finding svg object."); >+ assert(object.contentDocument, "contentDocument failed for <object> referencing an svg document."); >+ if (!object.getSVGDocument) >+ fail("getSVGDocument missing on <object> element."); >+ assert(object.getSVGDocument(), "getSVGDocument failed for <object> referencing an svg document."); >+ assert(object.getSVGDocument() == object.contentDocument, "Mismatch between getSVGDocument and contentDocument #2."); >+ return 5; >+ }, >+ function () { >+// PARTS COMMENTED OUT FOR 2011 UPDATE - SVG Fonts, SVG SMIL animation, and XLink have met with some implementor malaise even amongst those that shipped them >+// This affects tests 75 to 79 >+// // test 75: SMIL in SVG, from Erik Dahlstrom >+// // >+// // The test begins by creating a few elements, among those is a >+// // <set> element. This element is prevented from running by >+// // setting begin="indefinite", which means that the animation >+// // doesn't start until the 'beginElement' DOM method is called >+// // on the <set> element. The animation is a simple animation >+// // that sets the value of the width attribute to 0. The duration >+// // of the animation is 'indefinite' which means that the value >+// // will stay 0 indefinitely. The target of the animation is the >+// // 'width' attribute of the <rect> element that is the parent of >+// // the <set> element. When 'width' is 0 the rect is not rendered >+// // according to the spec[7]. >+// // >+// // Some properties of the SVGAnimatedLength[2] and SVGLength[8] >+// // are also inspected. Before the animation starts both baseVal >+// // and animVal contain the same values[2]. Then the animation is >+// // started by calling the beginElement method[9]. To make sure >+// // that time passes between the triggering of the animation and >+// // the time that the values are read out (in test #66), the >+// // current time is set to 1000 seconds using the setCurrentTime >+// // method[10]. >+// // >+// // [2] http://www.w3.org/TR/SVG11/types.html#InterfaceSVGAnimatedLength >+// // [7] http://www.w3.org/TR/SVG11/shapes.html#RectElement >+// // [8] http://www.w3.org/TR/SVG11/types.html#InterfaceSVGLength >+// // [9] http://www.w3.org/TR/SVG11/animate.html#DOMInterfaces >+// // [10] http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement >+// >+ var svgns = "http://www.w3.org/2000/svg"; >+ var svgdoc = kungFuDeathGrip.firstChild.contentDocument; >+ assert(svgdoc, "contentDocument failed on <iframe> for svg document."); >+ var svg = svgdoc.documentElement; >+ var rect = svgdoc.createElementNS(svgns, "rect"); >+ rect.setAttribute("fill", "red"); >+ rect.setAttribute("width", "100"); >+ rect.setAttribute("height", "100"); >+ rect.setAttribute("id", "rect"); >+// var anim = svgdoc.createElementNS(svgns, "set"); >+// anim.setAttribute("begin", "indefinite"); >+// anim.setAttribute("to", "0"); >+// anim.setAttribute("attributeName", "width"); >+// anim.setAttribute("dur", "indefinite"); >+// anim.setAttribute("fill", "freeze"); >+// rect.appendChild(anim); >+ svg.appendChild(rect); >+ assert(rect.width, "SVG DOM interface SVGRectElement not supported."); >+// assert(rect.width.baseVal, "SVG DOM base type SVGAnimatedLength not supported."); >+// assert(rect.width.animVal, "SVG DOM base type SVGAnimatedLength not supported."); >+// assertEquals(SVGLength.SVG_LENGTHTYPE_NUMBER, 1, "Incorrect SVGLength.SVG_LENGTHTYPE_NUMBER constant value."); >+// assertEquals(rect.width.baseVal.unitType, SVGLength.SVG_LENGTHTYPE_NUMBER, "Incorrect unitType on width attribute."); >+ assertEquals(rect.getAttribute("width"), "100", "Incorrect value from getAttribute."); >+// assertEquals(rect.width.baseVal.valueInSpecifiedUnits, 100, "Incorrect valueInSpecifiedUnits value."); >+// assertEquals(rect.width.baseVal.value, 100, "Incorrect baseVal value before animation."); >+// assertEquals(rect.width.animVal.value, 100, "Incorrect animVal value before animation."); >+// anim.beginElement(); >+// assertEquals(rect.width.baseVal.value, 100, "Incorrect baseVal value after starting animation."); >+// svg.setCurrentTime(1000); // setting 1 second to make sure that time != 0s when we check the animVal value >+// // the animation is then tested in the next test >+ return 5; >+ }, >+ function () { >+// // test 76: SMIL in SVG, part 2, from Erik Dahlstrom >+// // >+// // About animVal[2]: "If the given attribute or property is >+// // being animated, contains the current animated value of the >+// // attribute or property, and both the object itself and its >+// // contents are readonly. If the given attribute or property is >+// // not currently being animated, contains the same value as >+// // 'baseVal'." >+// // >+// // Since the duration of the animation is indefinite the value >+// // is still being animated at the time it's queried. Now since >+// // the 'width' attribute was animated from its original value of >+// // "100" to the new value of "0" the animVal property must >+// // contain the value 0. >+// // >+// // [2] http://www.w3.org/TR/SVG11/types.html#InterfaceSVGAnimatedLength >+// >+ var svgdoc = kungFuDeathGrip.firstChild.contentDocument; >+ assert(svgdoc, "contentDocument failed on <object> for svg document."); >+ var rect = svgdoc.getElementById("rect"); >+ assert(rect, "Failed to find <rect> element in svg document."); >+// assertEquals(rect.width.animVal.value, 0, "Incorrect animVal value after svg animation."); >+ return 5; >+ }, >+ function () { >+// // test 77: external SVG fonts, from Erik Dahlstrom >+// // >+// // SVGFonts are described here[3], and the relevant DOM methods >+// // used in the test are defined here[4]. >+// // >+// // Note that in order to be more predictable the svg should be >+// // visible, so that clause "For non-rendering environments, the >+// // user agent shall make reasonable assumptions about glyph >+// // metrics." doesn't influence the results. We use 'opacity:0' >+// // to hide the SVG, but arguably it's still a "rendering >+// // environment". >+// // >+// // The font-size 4000 was chosen because that matches the >+// // unitsPerEm value in the svgfont, which makes it easy to check >+// // the glyph advances since they will then be exactly what was >+// // specified in the svgfont. >+// // >+// // [3] http://www.w3.org/TR/SVG11/fonts.html >+// // [4] http://www.w3.org/TR/SVG11/text.html#InterfaceSVGTextContentElement >+// >+ var svgns = "http://www.w3.org/2000/svg"; >+// var xlinkns = "http://www.w3.org/1999/xlink"; >+ var svgdoc = kungFuDeathGrip.firstChild.contentDocument; >+ assert(svgdoc, "contentDocument failed on <object> for svg document."); >+ var svg = svgdoc.documentElement; >+ var text = svgdoc.createElementNS(svgns, "text"); >+ text.setAttribute("y", "1em"); >+ text.setAttribute("font-size", "4000"); >+ text.setAttribute("font-family", "ACID3svgfont"); >+ var textContent = svgdoc.createTextNode("abc"); >+ text.appendChild(textContent); >+ svg.appendChild(text); >+ // The font-size 4000 was chosen because that matches the unitsPerEm value in the svgfont, >+ // which makes it easy to check the glyph advances since they will then be exactly what was specified in the svgfont. >+ assert(text.getNumberOfChars, "SVGTextContentElement.getNumberOfChars() not supported."); >+ assertEquals(text.getNumberOfChars(), 3, "getNumberOfChars returned incorrect string length."); >+// assertEquals(text.getComputedTextLength(), 4711+42+23, "getComputedTextLength failed."); >+// assertEquals(text.getSubStringLength(0,1), 42, "getSubStringLength #1 failed."); >+// assertEquals(text.getSubStringLength(0,2), 42+23, "getSubStringLength #2 failed."); >+// assertEquals(text.getSubStringLength(1,1), 23, "getSubStringLength #3 failed."); >+// assertEquals(text.getSubStringLength(1,0), 0, "getSubStringLength #4 failed."); >+///* COMMENTED OUT BECAUSE SVGWG KEEPS CHANGING THIS >+// * var code = -1000; >+// * try { >+// * var sl = text.getSubStringLength(1,3); >+// * } catch(e) { >+// * code = e.code; >+// * } >+// * assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #1 didn't throw exception."); >+// * code = -1000; >+// * try { >+// * var sl = text.getSubStringLength(0,4); >+// * } catch(e) { >+// * code = e.code; >+// * } >+// * assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #2 didn't throw exception."); >+// * code = -1000; >+// * try { >+// * var sl = text.getSubStringLength(3,0); >+// * } catch(e) { >+// * code = e.code; >+// * } >+// * assertEquals(code, DOMException.INDEX_SIZE_ERR, "getSubStringLength #3 didn't throw exception."); >+// */ >+// code = -1000; >+// try { >+// var sl = text.getSubStringLength(-17,20); >+// } catch(e) { >+// code = 0; // negative values might throw native exception since the api accepts only unsigned values >+// } >+// assert(code == 0, "getSubStringLength #4 didn't throw exception."); >+// assertEquals(text.getStartPositionOfChar(0).x, 0, "getStartPositionOfChar(0).x returned invalid value."); >+// assertEquals(text.getStartPositionOfChar(1).x, 42, "getStartPositionOfChar(1).x returned invalid value."); >+// assertEquals(text.getStartPositionOfChar(2).x, 42+23, "getStartPositionOfChar(2).x returned invalid value."); >+// assertEquals(text.getStartPositionOfChar(0).y, 4000, "getStartPositionOfChar(0).y returned invalid value."); >+// code = -1000; >+// try { >+// var val = text.getStartPositionOfChar(-1); >+// } catch(e) { >+// code = 0; // negative values might throw native exception since the api accepts only unsigned values >+// } >+// assert(code == 0, "getStartPositionOfChar #1 exception failed."); >+// code = -1000; >+// try { >+// var val = text.getStartPositionOfChar(4); >+// } catch(e) { >+// code = e.code; >+// } >+// assertEquals(code, DOMException.INDEX_SIZE_ERR, "getStartPositionOfChar #2 exception failed."); >+// assertEquals(text.getEndPositionOfChar(0).x, 42, "getEndPositionOfChar(0).x returned invalid value."); >+// assertEquals(text.getEndPositionOfChar(1).x, 42+23, "getEndPositionOfChar(1).x returned invalid value."); >+// assertEquals(text.getEndPositionOfChar(2).x, 42+23+4711, "getEndPositionOfChar(2).x returned invalid value."); >+// code = -1000; >+// try { >+// var val = text.getEndPositionOfChar(-17); >+// } catch(e) { >+// code = 0; // negative values might throw native exception since the api accepts only unsigned values >+// } >+// assert(code == 0, "getEndPositionOfChar #1 exception failed."); >+// code = -1000; >+// try { >+// var val = text.getEndPositionOfChar(4); >+// } catch(e) { >+// code = e.code; >+// } >+// assertEquals(code, DOMException.INDEX_SIZE_ERR, "getEndPositionOfChar #2 exception failed."); >+ return 5; >+ }, >+ function () { >+// // test 78: SVG textPath and getRotationOfChar(), from Erik Dahlstrom >+// // >+// // The getRotationOfChar[4] method fetches the midpoint rotation >+// // of a glyph defined by a character (in this testcase there is >+// // a simple 1:1 correspondence between the two). The path is >+// // defined in the svg.xml file, and consists of first a line >+// // going down, then followed by a line that has a 45 degree >+// // slope and then followed by a horizontal line. The length of >+// // each path segment have been paired with the advance of each >+// // glyph, so that each glyph will be on each of the three >+// // different path segments (see text on a path layout rules[5]). >+// // Thus the rotation of the first glyph is 90 degrees, the >+// // second 45 degrees and the third 0 degrees. >+// // >+// // [4] http://www.w3.org/TR/SVG11/text.html#InterfaceSVGTextContentElement >+// // [5] http://www.w3.org/TR/SVG11/text.html#TextpathLayoutRules >+// >+ var svgns = "http://www.w3.org/2000/svg"; >+// var xlinkns = "http://www.w3.org/1999/xlink"; >+ var svgdoc = kungFuDeathGrip.firstChild.contentDocument; >+ assert(svgdoc, "contentDocument failed on <object> for svg document."); >+ var svg = svgdoc.documentElement; >+// var text = svgdoc.createElementNS(svgns, "text"); >+// text.setAttribute("font-size", "4000"); >+// text.setAttribute("font-family", "ACID3svgfont"); >+// var textpath = svgdoc.createElementNS(svgns, "textPath"); >+// textpath.setAttributeNS(xlinkns, "xlink:href", "#path"); >+// var textContent = svgdoc.createTextNode("abc"); >+// textpath.appendChild(textContent); >+// text.appendChild(textpath); >+// svg.appendChild(text); >+// assertEquals(text.getRotationOfChar(0), 90, "getRotationOfChar(0) failed."); >+// assertEquals(text.getRotationOfChar(1), 45, "getRotationOfChar(1) failed."); >+// assertEquals(text.getRotationOfChar(2), 0, "getRotationOfChar(2) failed."); >+// var code = -1000; >+// try { >+// var val = text.getRotationOfChar(-1) >+// } catch(e) { >+// code = e.code; >+// } >+// assertEquals(code, DOMException.INDEX_SIZE_ERR, "getRotationOfChar #1 exception failed."); >+// code = -1000; >+// try { >+// var val = text.getRotationOfChar(4) >+// } catch(e) { >+// code = e.code; >+// } >+// assertEquals(code, DOMException.INDEX_SIZE_ERR, "getRotationOfChar #2 exception failed."); >+ return 5; >+ }, >+ function () { >+// // test 79: a giant test for <svg:font>, from Cameron McCormack >+// // This tests various features of SVG fonts from SVG 1.1. It consists of >+// // a <text> element with 33 characters, styled using an SVG font that has >+// // different advance values for each glyph. The script uses >+// // SVGTextElementContent.getStartPositionOfChar() to determine where the >+// // glyph corresponding to each character was placed, and thus to work out >+// // whether the SVG font was used correctly. >+// // >+// // The font uses 100 units per em, and the text is set in 100px. Since >+// // font-size gives the size of the em box >+// // (http://www.w3.org/TR/SVG11/text.html#DOMInterfaces), the scale of the >+// // coordinate system for the glyphs is the same as the SVG document. >+// // >+// // The expectedAdvances array holds the expected advance value for each >+// // character, and expectedKerning holds the (negative) kerning for each >+// // character. getPositionOfChar() returns the actual x coordinate for the >+// // glyph, corresponding to the given character, and if multiple characters >+// // correspond to the same glyph, the same position value is returned for >+// // each of those characters. >+// // >+// // Here are the reasonings for the advance/kerning values. Note that for >+// // a given character at index i, the expected position is >+// // sum(expectedAdvances[0:i-1] + expectedKerning[0:i-1]). >+// // >+// // char advance kerning reasoning >+// // ------- ------- ------- -------------------------------------------------- >+// // A 10000 0 Normal character mapping to a single glyph. >+// // B 0 0 First character of a two character glyph, so the >+// // current position isn't advanced until the second >+// // character. >+// // C 200 0 Second character of a two character glyph, so now >+// // the position is advanced. >+// // B 300 0 Although there is a glyph for "BC" in the font, >+// // it appears after the glyph for "B", so the single >+// // character glyph for "B" should be chosen instead. >+// // D 1100 0 Normal character mapping to a single glyph. >+// // A 10000 200 Kerning of -200 is specified in the font between >+// // the "A" and "EE" glyphs. >+// // E 0 0 The first character of a two character glyph "EE". >+// // E 1300 0 The second character of a two character glyph. >+// // U 0 0 This is a glyph for the six characters "U+0046", >+// // which happen to look like a valid unicode range. >+// // This tests that the <glyph unicode=""> in the >+// // font matches exact strings rather than a range, >+// // as used in the kerning elements. >+// // + 0 0 Second character of six character glyph. >+// // 0 0 0 Third character of six character glyph. >+// // 0 0 0 Fourth character of six character glyph. >+// // 4 0 0 Fifth character of six character glyph. >+// // 6 1700 0 Sixth character of six character glyph. >+// // U 0 0 The same six character glyph that looks like a >+// // Unicode range. One of the kerning elements has >+// // u1="U+0046" u2="U+0046", which shouldn't match >+// // this, because those attributes are interpreted >+// // as Unicode ranges if they are, and normal >+// // strings otherwise. Thus there should be no >+// // kerning between these two glyphs. >+// // G 2300 200 Kerning is between this character and the next >+// // "G", since there is an <hkern> element that >+// // uses a Unicode range on its u1="" attribute >+// // and a glyph name on its g2="" attribute which >+// // both match "G". >+// // G 2300 0 Normal character with kerning before it. >+// // H 3100 0 A glyph with graphical content describing the >+// // glyph, rather than a d="" attribute. >+// // I 4300 0 Glyphs are checked in document order for one >+// // that matches, but the first glyph with >+// // unicode="I" also has lang="zh", which disqualifies >+// // it. Thus the second glyph with unicode="I" >+// // is chosen. >+// // I 4100 0 Since this I has xml:lang="zh" on it in the text, >+// // the first glyph with lang="zh" matches. >+// // J 4700 -4700 A normal glyph with kerning between the "J" and the >+// // next glyph "A" equal to the advance of the "J" >+// // glyph, so the position should stay the same. >+// // A 10000 0 Normal glyph with kerning before it. >+// // K 5900 0 The first glyph with unicode="K" does not match, >+// // since it has orientation="v", so the second >+// // glyph with unicode="K" is chosen. >+// // <spc> 6100 0 The space character should select the glyph with >+// // unicode=" ", despite it having a misleading >+// // glyph-name="L". >+// // L 6700 0 The "L" character should select the glyph with >+// // unicode=" ", despite it having a misleading >+// // glyph-name="spacev". >+// // A 2900 0 An <altGlyph> element is used to select the >+// // glyph for U+10085 instead of the one for "A". >+// // U+10085 2900 0 Tests glyph selection with a non-plane-0 >+// // character. >+// // A 10000 0 A final normal character. >+// // >+// // In addition, the script tests the value returned by >+// // SVGTextContentElement.getNumberOfChars(), which in this case should be 34. >+// // If it returned 33, then it incorrectly counted Unicode characters instead >+// // of UTF-16 codepoints (probably). >+// // >+// // See http://www.w3.org/TR/SVG11/fonts.html for a description of the glyph >+// // matching rules, and http://www.w3.org/TR/SVG11/text.html#DOMInterfaces >+// // for a description of getStartPositionOfChar() and getNumberOfChars(). >+// // >+// // Note also that the test uses DOMImplementation.createDocument() to create >+// // the SVG document. This seems to cause browsers trouble for the SVG DOM >+// // interfaces, since the document isn't being "rendered" as it might be >+// // if it were in an <iframe>. Changing the test to use an <iframe> will >+// // at least let you see the main part of the test running. >+// >+ var NS = { >+ svg: 'http://www.w3.org/2000/svg', >+ xml: 'http://www.w3.org/XML/1998/namespace', >+// xlink: 'http://www.w3.org/1999/xlink' >+ }; >+ >+ var doc = kungFuDeathGrip.childNodes[1].contentDocument; >+ while (doc.hasChildNodes()) >+ doc.removeChild(doc.firstChild); >+ doc.appendChild(doc.createElementNS(NS.svg, "svg:svg")); >+// >+// var e = function (n, as, cs) { >+// var elt = doc.createElementNS(NS.svg, n); >+// if (as) { >+// for (var an in as) { >+// var idx = an.indexOf(':'); >+// var ns = null; >+// if (idx != -1) >+// ns = NS[an.substring(0, idx)]; >+// elt.setAttributeNS(ns, an, as[an]); >+// } >+// } >+// if (cs) { >+// for (var i in cs) { >+// var c = cs[i]; >+// elt.appendChild(typeof c == 'string' ? doc.createTextNode(c) : c); >+// } >+// } >+// return elt; >+// } >+// >+// doc.documentElement.appendChild(e('font', { 'horiz-adv-x': '10000'}, [e('font-face', { 'font-family': 'HCl', 'units-per-em': '100', 'ascent': '1000', 'descent': '500'}), e('missing-glyph', null, [e('path', { 'd': 'M100,0 h800 v-100 h-800 z'})]), e('glyph', { 'unicode': 'A', 'd': 'M100,0 h100 v-100 h-100 z'}), e('glyph', { 'unicode': 'BC', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '200'}), e('glyph', { 'unicode': 'B', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '300'}), e('glyph', { 'unicode': 'C', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '500'}), e('glyph', { 'unicode': 'BD', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '700'}), e('glyph', { 'unicode': 'D', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '1100'}), e('glyph', { 'unicode': 'EE', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '1300', 'glyph-name': 'grapefruit'}), e('glyph', { 'unicode': 'U+0046', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '1700'}), e('glyph', { 'unicode': 'F', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '1900'}), e('glyph', { 'unicode': 'G', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '2300', 'glyph-name': 'gee'}), e('glyph', { 'unicode': '\uD800\uDC85', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '2900', 'id': 'astral'}), e('glyph', { 'unicode': 'H', 'horiz-adv-x': '3100'}, [e('path', { 'd': 'M100,0 h100 v-100 h-100 z'})]), e('glyph', { 'unicode': 'I', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '4100', 'lang': 'zh'}), e('glyph', { 'unicode': 'I', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '4300'}), e('glyph', { 'unicode': 'J', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '4700'}), e('glyph', { 'unicode': 'K', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '5300', 'orientation': 'v'}), e('glyph', { 'unicode': 'K', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '5900'}), e('glyph', { 'unicode': ' ', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '6100', 'glyph-name': 'L'}), e('glyph', { 'unicode': 'L', 'd': 'M100,0 h100 v-100 h-100 z', 'horiz-adv-x': '6700', 'glyph-name': 'space'}), e('hkern', { 'u1': 'A', 'u2': 'EE', 'k': '1000'}), e('hkern', { 'u1': 'A', 'g2': 'grapefruit', 'k': '-200'}), e('hkern', { 'u1': 'U+0046', 'u2': 'U+0046', 'k': '-200'}), e('hkern', { 'u1': 'U+0047-0047', 'g2': 'gee', 'k': '-200'}), e('hkern', { 'u1': 'J', 'u2': 'A', 'k': '4700'})])); >+// doc.documentElement.appendChild(e('text', { 'y': '100', 'font-family': 'HCl', 'font-size': '100px', 'letter-spacing': '0px', 'word-spacing': '0px'}, ['ABCBDAEEU+0046U+0046GGHI', e('tspan', { 'xml:lang': 'zh'}, ['I']), 'JAK L', e('altGlyph', { 'xlink:href': '#astral'}, ['A']), '\uD800\uDC85A'])); >+// >+// var t = doc.documentElement.lastChild; >+// >+// var characterDescriptions = [ >+// "a normal character", >+// "the first character of a two-character glyph", >+// "the second character of a two-character glyph", >+// "a normal character, which shouldn't be the first character of a two-character glyph", >+// "a normal character, which shouldn't be the second character of a two-character glyph", >+// "a normal character, which has some kerning after it", >+// "the first character of a two-character glyph, which has some kerning before it", >+// "the second character of a two-character glyph, which has some kerning before it", >+// "the first character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the second character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the third character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the fourth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the fifth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the sixth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning after it, but this glyph does not", >+// "the first character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "the second character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "the third character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "the fourth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "the fifth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "the sixth character of a six-character glyph, which happens to look like a Unicode range, where the range-specified glyph has kerning before it, but this glyph does not", >+// "a normal character, which has some kerning after it that is specified by glyph name", >+// "a normal character, which has some kerning before it that is specified by glyph name", >+// "a normal character, whose glyph is given by child graphical content of the <glyph> element", >+// "a normal character, whose glyph should not match the one with a lang=\"\" attribute on it", >+// "a normal character, whose glyph should match the one with a lang=\"\" attribute on it", >+// "a normal character, which has some kerning after it that is equal to the advance of the character", >+// "a normal character, which has some kerning before it that is equal to the advance of the previous character", >+// "a normal character, whose glyph should not match the one with an orientation=\"v\" attribute on it", >+// "a space character, which has a misleading glyph-name=\"\" attribute", >+// "a normal character, which has a misleading glyph-name=\"\" attribute", >+// "a normal character, whose glyph is chosen to be another by using <altGlyph>", >+// "a character not in Plane 0 (high surrogate pair)", >+// "a character not in Plane 0 (low surrogate pair)", >+// "a normal character", >+// ]; >+// >+// var expectedAdvances = [ >+// 10000, // A >+// 0, // BC [0] >+// 200, // BC [1] >+// 300, // B >+// 1100, // D >+// 10000, // A >+// 0, // EE [0] >+// 1300, // EE [1] >+// 0, // U+0046 [0] >+// 0, // U+0046 [1] >+// 0, // U+0046 [2] >+// 0, // U+0046 [3] >+// 0, // U+0046 [4] >+// 1700, // U+0046 [5] >+// 0, // U+0046 [0] >+// 0, // U+0046 [1] >+// 0, // U+0046 [2] >+// 0, // U+0046 [3] >+// 0, // U+0046 [4] >+// 1700, // U+0046 [5] >+// 2300, // G >+// 2300, // G >+// 3100, // H >+// 4300, // I >+// 4100, // I (zh) >+// 4700, // J >+// 10000, // A >+// 5900, // K >+// 6100, // <space> >+// 6700, // L >+// 2900, // A (using 𐂅 altGlyph) >+// 0, // 𐂅 high surrogate pair >+// 2900, // 𐂅 low surrogate pair >+// 10000, // A >+// ]; >+// >+// var expectedKerning = [ >+// 0, // A >+// 0, // BC [0] >+// 0, // BC [1] >+// 0, // B >+// 0, // D >+// 200, // A >+// 0, // EE [0] >+// 0, // EE [1] >+// 0, // U+0046 [0] >+// 0, // U+0046 [1] >+// 0, // U+0046 [2] >+// 0, // U+0046 [3] >+// 0, // U+0046 [4] >+// 0, // U+0046 [5] >+// 0, // U+0046 [0] >+// 0, // U+0046 [1] >+// 0, // U+0046 [2] >+// 0, // U+0046 [3] >+// 0, // U+0046 [4] >+// 0, // U+0046 [5] >+// 200, // G >+// 0, // G >+// 0, // H >+// 0, // I >+// 0, // I (zh) >+// -4700, // J >+// 0, // A >+// 0, // K >+// 0, // <space> >+// 0, // L >+// 0, // A (using 𐂅 altGlyph) >+// 0, // 𐂅 high surrogate pair >+// 0, // 𐂅 low surrogate pair >+// 0, // A >+// ]; >+// >+// assertEquals(t.getNumberOfChars(), expectedAdvances.length, 'SVGSVGTextElement.getNumberOfChars() incorrect'); >+// >+// var expectedPositions = [0]; >+// for (var i = 0; i < expectedAdvances.length; i++) >+// expectedPositions.push(expectedPositions[i] + expectedAdvances[i] + expectedKerning[i]); >+// >+// var actualPositions = []; >+// for (var i = 0; i < t.getNumberOfChars(); i++) >+// actualPositions.push(t.getStartPositionOfChar(i).x); >+// actualPositions.push(t.getEndPositionOfChar(t.getNumberOfChars() - 1).x); >+// >+// for (var i = 0; i < expectedPositions.length; i++) { >+// if (expectedPositions[i] != actualPositions[i]) { >+// var s = "character position " + i + ", which is "; >+// if (i == 0) { >+// s += "before " + characterDescriptions[0]; >+// } else if (i == expectedPositions.length - 1) { >+// s += "after " + characterDescriptions[characterDescriptions.length - 1]; >+// } else { >+// s += "between " + characterDescriptions[i - 1] + " and " + characterDescriptions[i]; >+// } >+// s += ", is " + actualPositions[i] + " but should be " + expectedPositions[i] + "."; >+// fail(s); >+// } >+// } >+ return 5; >+ }, >+ function () { >+ // test 80: remove the iframes and the object >+ // (when fixing the test for http://dbaron.org/mozilla/visited-privacy, >+ // this section was flipped around so the linktest check is done first; >+ // this is to prevent the 'retry' from failing the second time since by >+ // then the kungFuDeathGrip has been nullified, if we do it first) >+ // first, check that the linktest is loaded >+ var a = document.links[1]; >+ assert(!(a == null), "linktest was null"); >+ assert(a.textContent == "YOU SHOULD NOT SEE THIS AT ALL", "linktest link couldn't be found"); // changed text when fixing http://dbaron.org/mozilla/visited-privacy >+ if (a.hasAttribute('class')) >+ return "retry"; // linktest onload didn't fire -- could be a networking issue, check that first >+ assert(!(kungFuDeathGrip == null), "kungFuDeathGrip was null"); >+ assert(!(kungFuDeathGrip.parentNode == null), "kungFuDeathGrip.parentNode was null"); >+ // ok, now remove the iframes >+ kungFuDeathGrip.parentNode.removeChild(kungFuDeathGrip); >+ kungFuDeathGrip = null; >+ // check that the xhtml files worked right >+ assert(notifications['xhtml.1'], "Script in XHTML didn't execute"); >+ assert(!notifications['xhtml.2'], "XML well-formedness error didn't stop script from executing"); >+ assert(!notifications['xhtml.3'], "Script executed despite having wrong namespace"); >+ return 5; >+ }, >+ >+ // bucket 6: ECMAScript >+ function () { >+ // test 81: length of arrays with elisions at end >+ var t1 = [,]; >+ var t2 = [,,]; >+ assertEquals(t1.length, 1, "[,] doesn't have length 1"); >+ assertEquals(t2.length, 2, "[,,] doesn't have length 2"); >+ return 6; >+ }, >+ function () { >+ // test 82: length of arrays with elisions in the middle >+ var t3 = ['a', , 'c']; >+ assertEquals(t3.length, 3, "['a',,'c'] doesn't have length 3"); >+ assert(0 in t3, "no 0 in t3"); >+ assert(!(1 in t3), "unexpected 1 in t3"); >+ assert(2 in t3, "no 2 in t3"); >+ assertEquals(t3[0], 'a', "t3[0] wrong"); >+ assertEquals(t3[2], 'c', "t3[2] wrong"); >+ return 6; >+ }, >+ function () { >+ // test 83: array methods >+ var x = ['a', 'b', 'c']; >+ assertEquals(x.unshift('A', 'B', 'C'), 6, "array.unshift() returned the wrong value"); >+ var s = x.join(undefined); >+ assertEquals(s, 'A,B,C,a,b,c', "array.join(undefined) used wrong separator"); // qv 15.4.4.5:3 >+ return 6; >+ }, >+ function () { >+ // test 84: converting numbers to strings >+ assertEquals((0.0).toFixed(4), "0.0000", "toFixed(4) wrong for 0"); >+ assertEquals((-0.0).toFixed(4), "0.0000", "toFixed(4) wrong for -0"); >+ assertEquals((0.00006).toFixed(4), "0.0001", "toFixed(4) wrong for 0.00006"); >+ assertEquals((-0.00006).toFixed(4), "-0.0001", "toFixed(4) wrong for -0.00006"); >+ assertEquals((0.0).toExponential(4), "0.0000e+0", "toExponential(4) wrong for 0"); >+ assertEquals((-0.0).toExponential(4), "0.0000e+0", "toExponential(4) wrong for -0"); >+ var x = 7e-4; >+ assertEquals(x.toPrecision(undefined), x.toString(undefined), "toPrecision(undefined) was wrong"); >+ return 6; >+ }, >+ function () { >+ // test 85: strings and string-related operations >+ // substr() and negative numbers >+ assertEquals("scathing".substr(-7, 3), "cat", "substr() wrong with negative numbers"); >+ return 6; >+ }, >+ function () { >+ // test 86: Date tests -- methods passed no arguments >+ var d = new Date(); >+ assert(isNaN(d.setMilliseconds()), "calling setMilliseconds() with no arguments didn't result in NaN"); >+ assert(isNaN(d), "date wasn't made NaN"); >+ assert(isNaN(d.getDay()), "date wasn't made NaN"); >+ return 6; >+ }, >+ function () { >+ // test 87: Date tests -- years >+ var d1 = new Date(Date.UTC(99.9, 6)); >+ assertEquals(d1.getUTCFullYear(), 1999, "Date.UTC() didn't do proper 1900 year offsetting"); >+ var d2 = new Date(98.9, 6); >+ assertEquals(d2.getFullYear(), 1998, "new Date() didn't do proper 1900 year offsetting"); >+ return 6; >+ }, >+ function () { >+ // test 88: ES3 section 7.6:3 (unicode escapes can't be used to put non-identifier characters into identifiers) >+ // and there's no other place for them in the syntax (other than strings, of course) >+ var ok = false; >+ try { >+ eval("var test = { };\ntest.i= 0;\ntest.i\\u002b= 1;\ntest.i;\n"); >+ } catch (e) { >+ ok = true; >+ } >+ assert(ok, "\\u002b was not considered a parse error in script"); >+ return 6; >+ }, >+ function () { >+ // test 89: Regular Expressions >+ var ok = true; >+ // empty classes in regexps >+ try { >+ eval("/TA[])]/.exec('TA]')"); >+ // JS regexps aren't like Perl regexps, if their character >+ // classes start with a ] that means they're empty. So this >+ // is a syntax error; if we get here it's a bug. >+ ok = false; >+ } catch (e) { } >+ assert(ok, "orphaned bracket not considered parse error in regular expression literal"); >+ try { >+ if (eval("/[]/.exec('')")) >+ ok = false; >+ } catch (e) { >+ ok = false; >+ } >+ assert(ok, "/[]/ either failed to parse or matched something"); >+ return 6; >+ }, >+ function () { >+ // test 90: Regular Expressions >+ // not back references. >+ assert(!(/(1)\0(2)/.test("12")), "NUL in regexp incorrectly ignored"); >+ assert((/(1)\0(2)/.test("1" + "\0" + "2")), "NUL in regexp didn't match correctly"); >+ assert(!(/(1)\0(2)/.test("1\02")), "octal 2 unexpectedly matched NUL"); >+ assertEquals(nullInRegexpArgumentResult, "passed", "failed //.test() check"); // nothing to see here, move along now >+ // back reference to future capture >+ var x = /(\3)(\1)(a)/.exec('cat'); // the \3 matches the empty string, qv. ES3:15.10.2.9 >+ assert(x, "/(\\3)(\\1)(a)/ failed to match 'cat'"); >+ assertEquals(x.length, 4, "/(\\3)(\\1)(a)/ failed to return four components"); >+ assertEquals(x[0], "a", "/(\\3)(\\1)(a)/ failed to find 'a' in 'cat'"); >+ assert(x[1] === "", "/(\\3)(\\1)(a)/ failed to find '' in 'cat' as first part"); >+ assert(x[2] === "", "/(\\3)(\\1)(a)/ failed to find '' in 'cat' as second part"); >+ assertEquals(x[3], "a", "/(\\3)(\\1)(a)/ failed to find 'a' in 'cat' as third part"); >+ // negative lookahead >+ x = /(?!(text))(te.t)/.exec("text testing"); >+ assertEquals(x.length, 3, "negative lookahead test failed to return the right number of bits"); >+ assertEquals(x[0], "test", "negative lookahead test failed to find the right text"); >+ assert(x[1] === undefined, "negative lookahead test failed to return undefined for negative lookahead capture"); >+ assert(x[2] === "test", "negative lookahead test failed to find the right second capture"); >+ return 6; >+ }, >+ function () { >+ // test 91: check that properties are enumerable by default >+ var test = { >+ constructor: function() { return 1; }, >+ toString: function() { return 2; }, >+ toLocaleString: function() { return 3; }, >+ valueOf: function() { return 4; }, >+ hasOwnProperty: function() { return 5; }, >+ isPrototypeOf: function() { return 6; }, >+ propertyIsEnumerable: function() { return 7; }, >+ prototype: function() { return 8; }, >+ length: function() { return 9; }, >+ unique: function() { return 10; } >+ }; >+ var results = []; >+ for (var property in test) >+ results.push([test[property](), property]); >+ results.sort(function(a, b) { >+ if (a[0] < b[0]) return -1; >+ if (a[0] > b[0]) return 1; >+ return 0; >+ }); >+ assertEquals(results.length, 10, "missing properties"); >+ for (var index = 0; index < 10; index += 1) >+ assertEquals(results[index][0], index+1, "order wrong at results["+index+"] == "); >+ var index = 0; >+ assertEquals(results[index++][1], "constructor", "failed to find constructor in expected position"); >+ assertEquals(results[index++][1], "toString", "failed to find toString in expected position"); >+ assertEquals(results[index++][1], "toLocaleString", "failed to find toLocaleString in expected position"); >+ assertEquals(results[index++][1], "valueOf", "failed to find valueOf in expected position"); >+ assertEquals(results[index++][1], "hasOwnProperty", "failed to find hasOwnProperty in expected position"); >+ assertEquals(results[index++][1], "isPrototypeOf", "failed to find isPrototypeOf in expected position"); >+ assertEquals(results[index++][1], "propertyIsEnumerable", "failed to find propertyIsEnumerable in expected position"); >+ assertEquals(results[index++][1], "prototype", "failed to find prototype in expected position"); >+ assertEquals(results[index++][1], "length", "failed to find length in expected position"); >+ assertEquals(results[index++][1], "unique", "failed to find unique in expected position"); >+ return 6; >+ }, >+ function () { >+ // test 92: internal properties of Function objects >+ // constructor is not ReadOnly >+ var f1 = function () { 1 }; >+ f1.prototype.constructor = "hello world"; >+ var f1i = new f1(); >+ assert(f1i.constructor === "hello world", "Function object's prototype's constructor was ReadOnly"); >+ // constructor is DontEnum (indeed, no properties at all on a new Function object) >+ var f2 = function () { 2 }; >+ var f2i = new f2(); >+ var count = 0; >+ for (var property in f2i) { >+ assert(property != "constructor", "Function object's prototype's constructor was not DontEnum"); >+ count += 1; >+ } >+ assertEquals(count, 0, "Function object had unexpected properties"); >+ // constructor is not DontDelete >+ var f3 = function (a, b) { 3 }; >+ delete f3.prototype.constructor; >+ var f3i = new f3(); >+ assertEquals(f3i.constructor, Object.prototype.constructor, "Function object's prototype's constructor was DontDelete (or got magically replaced)"); >+ return 6; >+ }, >+ function () { >+ // test 93: FunctionExpression semantics >+ var functest; >+ var vartest = 0; >+ var value = (function functest(arg) { >+ if (arg) >+ return 1; >+ vartest = 1; >+ functest = function (arg) { return 2; }; // this line does nothing as 'functest' is ReadOnly here >+ return functest(true); // this is therefore tail recursion and returns 1 >+ })(false); >+ assertEquals(vartest, 1, "rules in 10.1.4 not followed in FunctionBody"); >+ assertEquals(value, 1, "semantics of FunctionExpression: function Identifier ... not followed"); >+ assert(!functest, "Property in step 4 of FunctionExpression: function Identifier ... leaked to parent scope"); >+ return 6; >+ }, >+ function () { >+ // test 94: exception scope >+ var test = 'pass'; >+ try { >+ throw 'fail'; >+ } catch (test) { >+ test += 'ing'; >+ } >+ assertEquals(test, 'pass', 'outer scope poisoned by exception catch{} block'); >+ return 6; >+ }, >+ function () { >+ // test 95: types of expressions >+ var a = []; var s; >+ s = a.length = "2147483648"; >+ assertEquals(typeof s, "string", "type of |\"2147483648\"| is not string"); >+ return 6; >+ }, >+ function () { >+ // test 96: encodeURI() and encodeURIComponent() and null bytes >+ assertEquals(encodeURIComponent(String.fromCharCode(0)), '%00', "encodeURIComponent failed to encode U+0000"); >+ assertEquals(encodeURI(String.fromCharCode(0)), '%00', "encodeURI failed to encode U+0000"); >+ return 6; >+ }, >+ >+ // URIs >+ function () { >+ // test 97: data: URI parsing >+ assertEquals(d1, "one", "data: failed as escaped"); >+ assertEquals(d2, "two", "data: failed as base64"); >+ assertEquals(d3, "three", "data: failed as base64 escaped"); >+ assertEquals(d4, "four", "data: failed as base64 with spaces"); >+ assertEquals(d5, "five's", "data: failed with backslash"); >+ return 7; >+ }, >+ >+ // XHTML >+ function () { >+ // test 98: XHTML and the DOM >+ // (special test) >+ var doctype = document.implementation.createDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"); >+// COMMENTED OUT FOR 2011 UPDATE - doctypes are moving towards having an owner, like other nodes >+// assertEquals(doctype.ownerDocument, null, "doctype's ownerDocument was wrong after creation"); >+ var doc = document.implementation.createDocument("http://www.w3.org/1999/xhtml", "html", doctype); >+ doc.documentElement.appendChild(doc.createElementNS("http://www.w3.org/1999/xhtml", "head")); >+ doc.documentElement.appendChild(doc.createElementNS("http://www.w3.org/1999/xhtml", "body")); >+ var t = doc.createElementNS("http://www.w3.org/1999/xhtml", "title"); >+ doc.documentElement.firstChild.appendChild(t); >+ // ok we have a conforming XHTML1 doc in |doc| now. >+ assertEquals(doctype.ownerDocument, doc, "doctype's ownerDocument didn't change when it was assigned to another document"); >+ assertEquals(doc.title, "", "document had unexpected title"); >+ t.textContent = "Sparrow"; >+ assertEquals(doc.title, "Sparrow", "document.title did not update dynamically"); >+ doc.body.appendChild(doc.createElementNS("http://www.w3.org/1999/xhtml", "form")); >+ assertEquals(doc.forms.length, 1, "document.forms not updated after inserting a form"); >+ return 7; >+ }, >+ >+ // Sanity >+ function () { >+ // test 99: check for the weirdest bug ever >+ var a = document.createElement('a'); >+ a.setAttribute('href', 'http://www.example.com/'); >+ a.appendChild(document.createTextNode('www.example.com')); >+ a.href = 'http://hixie.ch/'; >+ assertEquals(a.firstChild.data, "www.example.com", "sanity did not prevail"); >+ a.href = 'http://damowmow.com/'; >+ assertEquals(a.firstChild.data, "www.example.com", "final test failed"); >+ return 7; >+ } >+ >+ ]; >+ window.parent.postMessage({num_tests: tests.length}, "*"); >+ var log = ''; >+ var delay = 10; >+ var score = 0, index = 0, retry = 0, errors = 0; >+ function update() { >+ var span = document.getElementById('score'); // not cached by JS >+ span.nextSibling.removeAttribute('class'); // no-op after first loop >+ span.nextSibling.nextSibling.firstChild.data = tests.length; // no-op after first loop >+ if (index < tests.length) { >+ var zeroPaddedIndex = index < 10 ? '0' + index : index; >+ try { >+ var beforeTest = new Date(); >+ var result = tests[index](); >+ var elapsedTest = new Date() - beforeTest; >+ if (result == "retry") { >+ // some tests uses this magical mechanism to wait for support files to load >+ // we will give this test 500 attempts (5000ms) before aborting >+ retry += 1; >+ if (retry < 500) { >+ setTimeout(update, delay); >+ return; >+ } >+ fail("timeout -- could be a networking issue"); >+ } else if (result) { >+ var bucket = document.getElementById('bucket' + result); >+ if (bucket) >+ bucket.className += 'P'; >+ score += 1; >+ if (retry > 0) { >+ errors += 1; >+ log += "Test " + zeroPaddedIndex + " passed, but took " + retry + " attempts (less than perfect).\n"; >+ } else if (elapsedTest > 33) { // 30fps >+ errors += 1; >+ log += "Test " + zeroPaddedIndex + " passed, but took " + elapsedTest + "ms (less than 30fps)\n"; >+ } >+ } else { >+ fail("no error message"); >+ } >+ window.parent.postMessage({test: index, result: "pass"}, "*"); >+ } catch (e) { >+ var s; >+ if (e.message) >+ s = e.message.replace(/\s+$/, ""); >+ else >+ s = e; >+ errors += 1; >+ log += "Test " + zeroPaddedIndex + " failed: " + s + "\n"; >+ window.parent.postMessage({test: index, result: "fail", message: s}, "*"); >+ }; >+ retry = 0; >+ index += 1; >+ span.firstChild.data = score; >+ setTimeout(update, delay); >+ } else { >+ var endTime = new Date(); >+ var elapsedTime = ((endTime - startTime) - (delay * tests.length)) / 1000; >+ log += "Total elapsed time: " + elapsedTime.toFixed(2) + "s"; >+ if (errors == 0) >+ log += "\nNo JS errors and no timing issues.\nWas the rendering pixel-for-pixel perfect too?"; >+ document.documentElement.classList.remove("reftest-wait"); >+ } >+ } >+ function report(event) { >+ // for debugging either click the "A" in "Acid3" (to get an alert) or shift-click it (to get a report) >+ if (event.shiftKey) { >+ var w = window.open(); >+ w.document.write('<pre>Failed ' + (tests.length - score) + ' of ' + tests.length + ' tests.\n' + >+ log.replace(/&/g,'&').replace(RegExp('<', 'g'), '<').replace('\0', '\\0') + >+ '<\/pre>'); >+ w.document.close(); >+ } else { >+ alert('Failed ' + (tests.length - score) + ' test' + (score == 1 ? '' : 's') + '.\n' + log) >+ } >+ } >+ </script> >+ <body onload="update() /* this attribute's value is tested in one of the tests */ "> >+ <h1 onclick="report(event)">Acid3</h1> >+ <div class="buckets" >+ ><p id="bucket1" class="z"></p >+ ><p id="bucket2" class="z"></p >+ ><p id="bucket3" class="z"></p >+ ><p id="bucket4" class="z"></p >+ ><p id="bucket5" class="z"></p >+ ><p id="bucket6" class="z"></p> >+ </div> >+ <p id="result"><span id="score">JS</span><span id="slash" class="hidden">/</span><span>?</span></p> >+ <!-- The following line is used in a number of the tests. It is done using document.write() to sidestep complaints of validity. --> >+ <script type="text/javascript">document.write('<map name=""><area href="" shape="rect" coords="2,2,4,4" alt="<\'>"><iframe src="empty.png">FAIL<\/iframe><iframe src="empty.txt">FAIL<\/iframe><iframe src="empty.html" id="selectors"><\/iframe><form action="" name="form"><input type=HIDDEN><\/form><table><tr><td><p><\/tbody> <\/table><\/map>');</script> >+ <p id="instructions">To pass the test,<span></span> a browser must use its default settings, the animation has to be smooth, the score has to end on 100/100, and the final page has to look exactly, pixel for pixel, like <a href="reference.sub.html">this reference rendering</a>.</p> >+ <p id="remove-last-child-test">Scripting must be enabled to use this test.</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..00f28c9c610d4ac4fdfc4c855791d8d5be02884a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/w3c-import.log >@@ -0,0 +1,40 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.css.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.png >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.txt >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/empty.xml.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/favicon.ico.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/numbered-tests.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/reference.png >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-a.png >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/support-b.png.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/svg.xml.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/test.html >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1 >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2 >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2.headers >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3 >+/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3.headers >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1 b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1 >new file mode 100644 >index 0000000000000000000000000000000000000000..8daafce8cd276c00e1b429c36173c653107de4e1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1 >@@ -0,0 +1,11 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>Test</title> >+ </head> >+ <body> >+ <p> <strong> XHTML Test </strong> </p> >+ <script type="text/javascript"> >+ parent.notify("xhtml.1") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..f203c6368ef999e21b14c6f7158110e8f1112e5a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.1.headers >@@ -0,0 +1 @@ >+Content-Type: text/xml >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2 b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2 >new file mode 100644 >index 0000000000000000000000000000000000000000..c7af4f1c27fa2d8def44c42d34ed9a430d020e68 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2 >@@ -0,0 +1,11 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>Test</title> >+ </head> >+ <body> >+ <p> <strong/> Parsing Test </strong> </p> >+ <script type="text/javascript"> >+ parent.notify("xhtml.2") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..f203c6368ef999e21b14c6f7158110e8f1112e5a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.2.headers >@@ -0,0 +1 @@ >+Content-Type: text/xml >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3 b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3 >new file mode 100644 >index 0000000000000000000000000000000000000000..8cd8db7360827721fcadf8362eb91e077b4b35cc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3 >@@ -0,0 +1,11 @@ >+<html xmlns="http://www.w3.org/1999/xhtml#"> >+ <head> >+ <title>Test</title> >+ </head> >+ <body> >+ <p> <strong> Namespace Test </strong> </p> >+ <script type="text/javascript"> >+ parent.notify("xhtml.3") >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3.headers b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..f203c6368ef999e21b14c6f7158110e8f1112e5a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/acid3/xhtml.3.headers >@@ -0,0 +1 @@ >+Content-Type: text/xml >diff --git a/LayoutTests/imported/w3c/web-platform-tests/acid/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/acid/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..616f61bb60bc9826227115c9c4b20ff3a1c1afb7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/acid/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/acid/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/acid/README.md >diff --git a/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..7231f6248dcc89c1c75d2b0960d14098a2811e02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/OWNERS >@@ -0,0 +1 @@ >+@domenic >diff --git a/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b015d8fd29a9a72367455280dcf03b7a6dc09e3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 1: [blocked] The page at https://localhost:9443/async-local-storage/storage-smoke-test.https.tentative.html was not allowed to run insecure content from std:async-local-storage. >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b4d66dabc7a177742666377718b30f84a10de744 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async local storage storage export smoke test</title> >+ >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script type="module"> >+import { storage } from "std:async-local-storage"; >+ >+test(() => { >+ const { backingStore } = storage; >+ assert_array_equals(Object.keys(backingStore), ["database", "store", "version"]); >+ assert_own_property(backingStore, "database"); >+ assert_own_property(backingStore, "store"); >+ assert_own_property(backingStore, "version"); >+ assert_equals(Object.getPrototypeOf(backingStore), Object.prototype); >+ >+ assert_equals(backingStore.database, "async-local-storage:default"); >+ assert_equals(backingStore.store, "store"); >+ assert_equals(backingStore.version, 1); >+}, "backingStore returns the correct object"); >+ >+promise_test(async (t) => { >+ t.add_cleanup(async () => { >+ await storage.clear(); >+ }); >+ >+ assert_equals(await storage.set("key", "value"), undefined); >+ >+ assert_equals(await storage.get("key"), "value"); >+ assert_equals(await storage.has("key"), true); >+ assert_array_equals(await storage.keys(), ["key"]); >+ assert_array_equals(await storage.values(), ["value"]); >+ >+ const entries = await storage.entries(); >+ assert_true(Array.isArray(entries)); >+ assert_equals(entries.length, 1); >+ assert_array_equals(entries[0], ["key", "value"]); >+ >+ assert_equals(await storage.delete("key"), undefined); >+ >+ assert_equals(await storage.get("key"), undefined); >+ assert_equals(await storage.has("key"), false); >+}, "storage methods work, at least for one entry with string key and value"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..e1a20c6716cb231ec93e864e99bd464e8e1d706a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/async-local-storage/storage-smoke-test.https.tentative.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.html >index f512e45407125061d2f3aee70eb6f9192774d638..51e320e64379f0af8323aebaf3552cef8f244914 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.html >@@ -12,15 +12,17 @@ > <script> > 'use strict'; > >-promise_test(function() { >- return fetch('/interfaces/background-fetch.idl') >- .then(response => response.text()) >- .then(idls => { >- var idlArray = new IdlArray(); >- idlArray.add_untested_idls('interface ServiceWorkerRegistration {};'); >- idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};'); >- idlArray.add_idls(idls); >- idlArray.test(); >- }); >+promise_test(async function () { >+ const idls = await fetch('/interfaces/background-fetch.idl').then(r => r.text()); >+ const dom = await fetch('/interfaces/dom.idl').then(r => r.text()); >+ >+ var idlArray = new IdlArray(); >+ idlArray.add_untested_idls('interface ServiceWorkerRegistration {};'); >+ idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};'); >+ idlArray.add_untested_idls('interface ExtendableEvent{};'); >+ idlArray.add_untested_idls('dictionary ExtendableEventInit{};'); >+ idlArray.add_untested_idls(dom, { only: ['EventTarget'] }); >+ idlArray.add_idls(idls); >+ idlArray.test(); > }, 'Exposed interfaces in a Document.'); > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.worker.js b/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.worker.js >index 89a7cb3da0ad7310f5c0226f2a3b695c740ef4dd..0760ffd59af52a1125eb49e55107d8943b18212d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.worker.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/background-fetch/interfaces.worker.js >@@ -3,16 +3,18 @@ > importScripts('/resources/testharness.js'); > importScripts('/resources/WebIDLParser.js', '/resources/idlharness.js'); > >-promise_test(function() { >- return fetch('/interfaces/background-fetch.idl') >- .then(response => response.text()) >- .then(idls => { >- var idlArray = new IdlArray(); >- idlArray.add_untested_idls('interface ServiceWorkerRegistration {};'); >- idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};'); >- idlArray.add_idls(idls); >- idlArray.test(); >- }); >+promise_test(async function() { >+ const idls = await fetch('/interfaces/background-fetch.idl').then(r => r.text()); >+ const dom = await fetch('/interfaces/dom.idl').then(r => r.text()); >+ >+ var idlArray = new IdlArray(); >+ idlArray.add_untested_idls('interface ServiceWorkerRegistration {};'); >+ idlArray.add_untested_idls('[SecureContext, Exposed = (Window, Worker)] interface ServiceWorkerGlobalScope {};'); >+ idlArray.add_untested_idls('interface ExtendableEvent{};'); >+ idlArray.add_untested_idls('dictionary ExtendableEventInit{};'); >+ idlArray.add_untested_idls(dom, { only: ['EventTarget'] }); >+ idlArray.add_idls(idls); >+ idlArray.test(); > }, 'Exposed interfaces in a Service Worker.'); > > done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/beacon/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..719eb69cf52b28d405ce9dba07d9cac523972368 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/OWNERS >@@ -0,0 +1,2 @@ >+@toddreifsteck >+@igrigorik >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-common.sub.js b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-common.sub.js >index de3846b6cbc9fdfc9dfb55338d7d1bdb84a82abc..0a36283b26379e16ccfd2c33cf05e0395dc18331 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-common.sub.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-common.sub.js >@@ -39,6 +39,10 @@ var emptyFormDataTest = { id: "EmptyFormData", data: CreateEmptyFormDataPayload( > var smallFormDataTest = { id: "SmallFormData", data: CreateFormDataFromPayload(smallPayload) }; > var mediumFormDataTest = { id: "MediumFormData", data: CreateFormDataFromPayload(mediumPayload) }; > var largeFormDataTest = { id: "LargeFormData", data: CreateFormDataFromPayload(largePayload) }; >+var smallSafeContentTypeEncodedTest = { id: "SmallSafeContentTypeEncoded", data: new Blob([smallPayload], { type: 'application/x-www-form-urlencoded' }) }; >+var smallSafeContentTypeFormTest = { id: "SmallSafeContentTypeForm", data: new FormData() }; >+var smallSafeContentTypeTextTest = { id: "SmallSafeContentTypeText", data: new Blob([smallPayload], { type: 'text/plain' }) }; >+var smallCORSContentTypeTextTest = { id: "SmallCORSContentTypeText", data: new Blob([smallPayload], { type: 'text/html' }) }; > // We don't test maxFormData because the extra multipart separators make it difficult to > // calculate a maxPayload. > >@@ -52,12 +56,15 @@ var bufferSourceTests = [emptyBufferSourceTest, smallBufferSourceTest, mediumBuf > var bufferSourceMaxTest = [maxBufferSourceTest]; > var formDataTests = [emptyFormDataTest, smallFormDataTest, mediumFormDataTest, largeFormDataTest]; > var formDataMaxTest = [largeFormDataTest]; >-var allTests = [].concat(stringTests, stringMaxTest, blobTests, blobMaxTest, bufferSourceTests, bufferSourceMaxTest, formDataTests, formDataMaxTest); >+var contentTypeTests = [smallSafeContentTypeEncodedTest,smallSafeContentTypeFormTest,smallSafeContentTypeTextTest,smallCORSContentTypeTextTest]; >+var allTests = [].concat(stringTests, stringMaxTest, blobTests, blobMaxTest, bufferSourceTests, bufferSourceMaxTest, formDataTests, formDataMaxTest, contentTypeTests); > > // This special cross section of test cases is meant to provide a slimmer but reasonably- > // representative set of tests for parameterization across variables (e.g. redirect codes, > // cors modes, etc.) >-var sampleTests = [noDataTest, nullDataTest, undefinedDataTest, smallStringTest, smallBlobTest, smallBufferSourceTest, smallFormDataTest]; >+var sampleTests = [noDataTest, nullDataTest, undefinedDataTest, smallStringTest, smallBlobTest, smallBufferSourceTest, smallFormDataTest, smallSafeContentTypeEncodedTest, smallSafeContentTypeFormTest, smallSafeContentTypeTextTest]; >+ >+var preflightTests = [smallCORSContentTypeTextTest]; > > // Build a test lookup table, which is useful when instructing a web worker or an iframe > // to run a test, so that we don't have to marshal the entire test case across a process boundary. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-cors.sub.window.js b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-cors.sub.window.js >index ddfdfbfa0a2796ac4bd2f9355ad7e1faa52046cf..f4bccf177e3b4585a5efe0b6cd0d6edc24fe48f9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-cors.sub.window.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-cors.sub.window.js >@@ -38,4 +38,30 @@ > runTests(sampleTests); > }); > >+// Now test a cross-origin request that doesn't use a safelisted Content-Type and ensure >+// we are applying the proper restrictions. Since a non-safelisted Content-Type request >+// header is used there should be a preflight/options request and we should only succeed >+// send the payload if the proper CORS headers are used. >+{ >+ // Implement the self.buildId extension to identify the parameterized >+ // test in the report. >+ self.buildId = function (baseId) { >+ return `${baseId}-PREFLIGHT-ALLOW`; >+ }; >+ >+ // Implement the self.buildBaseUrl and self.buildTargetUrl extensions >+ // to change the target URL to use a cross-origin domain name. >+ self.buildBaseUrl = function (baseUrl) { >+ return "http://{{domains[www]}}:{{ports[http][0]}}"; >+ }; >+ >+ // Implement the self.buildTargetUrl extension to append a directive >+ // to the handler, that it should return CORS headers for the preflight we expect. >+ self.buildTargetUrl = function (targetUrl) { >+ return `${targetUrl}&origin=http://{{host}}:{{ports[http][0]}}&credentials=true&preflightExpected=true`; >+ } >+ >+ runTests(preflightTests); >+} >+ > done(); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-error.window.js b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-error.window.js >index 9c037ba34f6d10bd55e007d6cf7fb74082aa6944..b53353abc1ea29679216488ef17c9c9a010a434d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-error.window.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-error.window.js >@@ -24,16 +24,25 @@ test(function() { > }, "Verify calling 'navigator.sendBeacon()' with a URL that is not a http(s) scheme throws an exception."); > > // We'll validate that we can send one beacon that uses our entire Quota and then fail to send one that is just one char. >-test(function () { >- var destinationURL = "/fetch/api/resources/trickle.py?count=1&ms=1000"; >- >- var firstSuccess = navigator.sendBeacon(destinationURL, maxPayload); >- assert_true(firstSuccess, "calling 'navigator.sendBeacon()' with our max payload size should succeed."); >+promise_test(async () => { >+ function wait(ms) { >+ return new Promise(res => step_timeout(res, ms)); >+ } >+ const url = '/fetch/api/resources/trickle.py?count=1&ms=0'; >+ assert_true(navigator.sendBeacon(url, maxPayload), >+ "calling 'navigator.sendBeacon()' with our max payload size should succeed."); > > // Now we'll send just one character. >- var secondSuccess = navigator.sendBeacon(destinationURL, "1"); >- assert_false(secondSuccess, "calling 'navigator.sendBeacon()' with just one char should fail while our Quota is used up."); >- >-}, "Verify calling 'navigator.sendBeacon()' with a small payload fails while Quota is completely utilized."); >+ assert_false(navigator.sendBeacon(url, '1'), >+ "calling 'navigator.sendBeacon()' with just one char should fail while our Quota is used up."); >+ >+ for (let i = 0; i < 20; ++i) { >+ await wait(100); >+ if (navigator.sendBeacon(url, maxPayload)) { >+ return; >+ } >+ } >+ assert_unreached('The quota should recover after fetching.'); >+}, "Verify the behavior after the quota is exhausted."); > > done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-navigate-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-navigate-expected.txt >index 7abb6d26da0ea57ff58046c223dca331059421ae..d5450c0b7fecf3c3318fe0e623cf6977f7df4e4a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-navigate-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-navigate-expected.txt >@@ -7,4 +7,7 @@ PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallString > PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallBlob-beacon-NAVIGATE > PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallBufferSource-beacon-NAVIGATE > PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallFormData-beacon-NAVIGATE >+PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallSafeContentTypeEncoded-beacon-NAVIGATE >+PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallSafeContentTypeForm-beacon-NAVIGATE >+PASS Verify 'navigator.sendbeacon()' successfully sends for variant: SmallSafeContentTypeText-beacon-NAVIGATE > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/headers/header-content-type.html b/LayoutTests/imported/w3c/web-platform-tests/beacon/headers/header-content-type.html >index 2d23adfb712c4488ca6b64a406b0a181a05fe6c0..e2f2705ee64943cc595a1cc12488270db83c40fc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/headers/header-content-type.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/headers/header-content-type.html >@@ -10,36 +10,30 @@ > <script src="/common/utils.js"></script> > <script src="/common/get-host-info.sub.js"></script> > <script> >-var RESOURCES_DIR = "/beacon/resources/"; >- >-function pollResult(test, id) { >- var checkUrl = RESOURCES_DIR + "content-type.py?cmd=get&id=" + id; >- >- return new Promise(resolve => { >- step_timeout(test.step_func(() => { >- fetch(checkUrl).then(response => { >- response.text().then(body => { >- resolve(body); >- }); >- }); >- }), 1000); >- }); >-} >+const RESOURCES_DIR = "/beacon/resources/"; > > function testContentTypeHeader(what, contentType, title) { >- var testBase = RESOURCES_DIR; >- var id = self.token(); >- var testUrl = testBase + "content-type.py?cmd=put&id=" + id; >- >- promise_test(function(test) { >+ function wait(ms) { >+ return new Promise(resolve => step_timeout(resolve, ms)); >+ } >+ promise_test(async t => { >+ const id = self.token(); >+ const testUrl = new Request(RESOURCES_DIR + "content-type.py?cmd=put&id=" + id).url; >+ assert_equals(performance.getEntriesByName(testUrl).length, 0); > assert_true(navigator.sendBeacon(testUrl, what), "SendBeacon Succeeded"); >- return pollResult(test, id) .then(result => { >- if (contentType == "multipart/form-data") { >- assert_true(result.startsWith(contentType), "Correct Content-Type header result"); >- } else { >- assert_equals(result, contentType, "Correct Content-Type header result"); >- } >- }); >+ >+ do { >+ await wait(50); >+ } while (performance.getEntriesByName(testUrl).length === 0); >+ assert_equals(performance.getEntriesByName(testUrl).length, 1); >+ const checkUrl = RESOURCES_DIR + "content-type.py?cmd=get&id=" + id; >+ const response = await fetch(checkUrl); >+ const text = await response.text(); >+ if (contentType === "multipart/form-data") { >+ assert_true(text.startsWith(contentType), "Correct Content-Type header result"); >+ } else { >+ assert_equals(text, contentType, "Correct Content-Type header result"); >+ } > }, "Test content-type header for a body " + title); > } > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/resources/beacon.py b/LayoutTests/imported/w3c/web-platform-tests/beacon/resources/beacon.py >index afa522a2a91707fcbf9dcc4845296399afb2bafa..5f2553d3c4d506f7e292cfb73d81930a83a12d76 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/resources/beacon.py >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/resources/beacon.py >@@ -60,40 +60,52 @@ def main(request, response): > # with the unique session id, in order to retrieve a range of results > # later knowing the index range. > test_idx = request.GET.first("tidx") >- >- test_data_key = build_stash_key(session_id, test_idx) > test_data = { "id": test_id, "error": None } > >- payload = "" >- if "Content-Type" in request.headers and \ >- "form-data" in request.headers["Content-Type"]: >- if "payload" in request.POST: >- # The payload was sent as a FormData. >- payload = request.POST.first("payload") >+ # Only store the actual POST requests, not any preflight/OPTIONS requests we may get. >+ if request.method == "POST": >+ test_data_key = build_stash_key(session_id, test_idx) >+ >+ payload = "" >+ if "Content-Type" in request.headers and \ >+ "form-data" in request.headers["Content-Type"]: >+ if "payload" in request.POST: >+ # The payload was sent as a FormData. >+ payload = request.POST.first("payload") >+ else: >+ # A FormData was sent with an empty payload. >+ pass > else: >- # A FormData was sent with an empty payload. >- pass >- else: >- # The payload was sent as either a string, Blob, or BufferSource. >- payload = request.body >- >- payload_parts = filter(None, payload.split(":")) >- if len(payload_parts) > 0: >- payload_size = int(payload_parts[0]) >- >- # Confirm the payload size sent matches with the number of characters sent. >- if payload_size != len(payload_parts[1]): >- test_data["error"] = "expected %d characters but got %d" % (payload_size, len(payload_parts[1])) >+ # The payload was sent as either a string, Blob, or BufferSource. >+ payload = request.body >+ >+ payload_parts = filter(None, payload.split(":")) >+ if len(payload_parts) > 0: >+ payload_size = int(payload_parts[0]) >+ >+ # Confirm the payload size sent matches with the number of characters sent. >+ if payload_size != len(payload_parts[1]): >+ test_data["error"] = "expected %d characters but got %d" % (payload_size, len(payload_parts[1])) >+ else: >+ # Confirm the payload contains the correct characters. >+ for i in range(0, payload_size): >+ if payload_parts[1][i] != "*": >+ test_data["error"] = "expected '*' at index %d but got '%s''" % (i, payload_parts[1][i]) >+ break >+ >+ # Store the result in the stash so that it can be retrieved >+ # later with a 'stat' command. >+ request.server.stash.put(test_data_key, test_data) >+ elif request.method == "OPTIONS": >+ # If we expect a preflight, then add the cors headers we expect, otherwise log an error as we shouldn't >+ # send a preflight for all requests. >+ if "preflightExpected" in request.GET: >+ response.headers.set("Access-Control-Allow-Headers", "content-type") >+ response.headers.set("Access-Control-Allow-Methods", "POST") > else: >- # Confirm the payload contains the correct characters. >- for i in range(0, payload_size): >- if payload_parts[1][i] != "*": >- test_data["error"] = "expected '*' at index %d but got '%s''" % (i, payload_parts[1][i]) >- break >- >- # Store the result in the stash so that it can be retrieved >- # later with a 'stat' command. >- request.server.stash.put(test_data_key, test_data) >+ test_data_key = build_stash_key(session_id, test_idx) >+ test_data["error"] = "Preflight not expected." >+ request.server.stash.put(test_data_key, test_data) > elif command == "stat": > test_idx_min = int(request.GET.first("tidx_min")) > test_idx_max = int(request.GET.first("tidx_max")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/beacon/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/beacon/w3c-import.log >index e2e1c720f57fd7a383a9bc7ff475de7bee73e699..0887376b09285ffcf707d458db9ee4bec630ceee 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/beacon/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/beacon/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/beacon/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-basic-blob.html > /LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-basic-blobMax.html > /LayoutTests/imported/w3c/web-platform-tests/beacon/beacon-basic-buffersource.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/budget-api/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..9cc0eff9fd27ff31f34c64222976322b62fe206a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/OWNERS >@@ -0,0 +1 @@ >+@beverloo >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..30bef165f27d7aceae73db9e679132cf8a046129 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any-expected.txt >@@ -0,0 +1,27 @@ >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+ >+FAIL budget-api interfaces. promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.html b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.js b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..84e8874182a2f696c2efa06ffa382dc1141e1c01 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.js >@@ -0,0 +1,24 @@ >+// META: script=/resources/WebIDLParser.js >+// META: script=/resources/idlharness.js >+ >+'use strict'; >+ >+// See https://wicg.github.io/budget-api/ >+ >+promise_test(async () => { >+ const html = await fetch('/interfaces/html.idl').then(r => r.text()); >+ const workers = await fetch('/interfaces/dedicated-workers.idl').then(r => r.text()); >+ const idl = await fetch('/interfaces/budget-api.idl').then(r => r.text()); >+ >+ const idlArray = new IdlArray(); >+ idlArray.add_untested_idls(html, { only: [ >+ 'Navigator', >+ 'NavigatorContentUtils', >+ 'NavigatorCookies', >+ 'NavigatorPlugins', >+ ] }); >+ idlArray.add_untested_idls(workers); >+ idlArray.add_idls(idl); >+ idlArray.test(); >+ done(); >+}, 'budget-api interfaces.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..098a1948141463ff9b2d4691c0830dfdec3aa151 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker-expected.txt >@@ -0,0 +1,25 @@ >+ >+FAIL budget-api interfaces. promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/budget-api/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/budget-api/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..c50ea38ce9a62b2d7b2a5f7279d8eb86f83b87e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/budget-api/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/budget-api/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/budget-api/interfaces.any.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/check_stability.ini b/LayoutTests/imported/w3c/web-platform-tests/check_stability.ini >index f5ec030149b0319d823f54e334ea3a3f51230c25..b939328be1cb69c3dcc47495930ba0df28b2bad2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/check_stability.ini >+++ b/LayoutTests/imported/w3c/web-platform-tests/check_stability.ini >@@ -6,5 +6,4 @@ skip_tests: conformance-checkers docs tools > # Exhaustively validating such changes is highly resource intensive > # (particularly in terms of execution time), making it impractical in most > # cases. >-ignore_changes: resources >-results_url: https://pulls.web-platform-tests.org/api/stability >+ignore_changes: resources/** >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/client-hints/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..1bcab3b39a19459cfc07f755706b9908754878db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/OWNERS >@@ -0,0 +1,3 @@ >+@igrigorik >+@yoavweiss >+@tarunban >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cb9419aa3db2ace88a3b9f0529bc17335f1d0020 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Accept-CH header test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html >new file mode 100644 >index 0000000000000000000000000000000000000000..50d77646f89aea13c212c6ecee4e7f32107007e9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html >@@ -0,0 +1,35 @@ >+<html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+// When the response for the HTML file contains "Accept-CH" in the response >+// headers, then the browser should not attach the specified client hints in >+// the HTTP request headers if the response was delivered by an insecure HTTP >+// server. Test this functionality by fetching an XHR from this page hosted on >+// an insecure HTTP server. The response headers for this page include >+// "Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect". >+// >+// echo_client_hints_received.py sets the response headers depending on the set >+// of client hints it receives in the request headers. >+ >+ promise_test(t => { >+ return fetch("/client-hints/echo_client_hints_received.py").then(r => { >+ assert_equals(r.status, 200) >+ // Verify that the browser does not include client hints in the headers >+ // when fetching the XHR from an insecure HTTP server. >+ assert_false(r.headers.has("device-memory-received"), "device-memory-received"); >+ assert_false(r.headers.has("dpr-received"), "dpr-received"); >+ assert_false(r.headers.has("viewport-width-received"), "viewport-width-received"); >+ assert_false(r.headers.has("rtt-received"), "rtt-received"); >+ assert_false(r.headers.has("downlink-received"), "downlink-received"); >+ assert_false(r.headers.has("ect-received"), "ect-received"); >+ }); >+}, "Accept-CH header test"); >+ >+</script> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html.headers b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..4f3a57b865b8b58fd5c037976880de8e6cc184da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html.headers >@@ -0,0 +1 @@ >+Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c0bd2f5ae4460c01f1c181f4cd7212cf2f85ef91 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https-expected.txt >@@ -0,0 +1,6 @@ >+Blocked access to external URL https://www.localhost:9443/client-hints/echo_client_hints_received.py >+CONSOLE MESSAGE: line 44: Fetch API cannot load https://www.localhost:9443/client-hints/echo_client_hints_received.py due to access control checks. >+ >+FAIL Accept-CH header test assert_true: device-memory-received expected true got false >+FAIL Cross-Origin Accept-CH header test promise_test: Unhandled rejection with value: object "TypeError: Type error" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..78c7ad0e1855eca2d1989fa8033658f45eb10344 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html >@@ -0,0 +1,62 @@ >+<html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+// If the response for the HTML file contains "Accept-CH" in the response >+// headers, then the browser should attach the specified client hints in the >+// HTTP request headers depending on whether the resource is being fetched from >+// the same origin or a different origin. Test this functionality by fetching >+// same-origin and cross-origin resources from this page. The response headers >+// for this page include "Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect". >+// >+// echo_client_hints_received.py sets the response headers depending on the set >+// of client hints it receives in the request headers. >+ >+promise_test(t => { >+ return fetch("https://{{domains[]}}:{{ports[https][0]}}/client-hints/echo_client_hints_received.py", {"mode": "no-cors"}).then(r => { >+ assert_equals(r.status, 200) >+ // Verify that the browser includes client hints in the headers for a >+ // same-origin fetch. >+ assert_true(r.headers.has("device-memory-received"), "device-memory-received"); >+ assert_true(r.headers.has("dpr-received"), "dpr-received"); >+ assert_true(r.headers.has("viewport-width-received"), "viewport-width-received"); >+ >+ assert_true(r.headers.has("rtt-received"), "rtt-received"); >+ var rtt = parseInt(r.headers.get("rtt-received")); >+ assert_greater_than_equal(rtt, 0); >+ assert_less_than_equal(rtt, 3000); >+ assert_equals(rtt % 50, 0, 'rtt must be a multiple of 50 msec'); >+ >+ assert_true(r.headers.has("downlink-received"), "downlink-received"); >+ var downlinkKbps = r.headers.get("downlink-received") * 1000; >+ assert_greater_than_equal(downlinkKbps, 0); >+ assert_less_than_equal(downlinkKbps, 10000); >+ >+ assert_in_array(r.headers.get("ect-received"), ["slow-2g", "2g", >+ "3g", "4g"], 'ect-received is unexpected'); >+ }); >+}, "Accept-CH header test"); >+ >+promise_test(t => { >+ return fetch("https://{{domains[www]}}:{{ports[https][0]}}/client-hints/echo_client_hints_received.py").then(r => { >+ assert_equals(r.status, 200) >+ // Verify that the browser does not include client hints in the headers >+ // for a cross-origin fetch. >+ assert_false(r.headers.has("device-memory-received"), "device-memory-received"); >+ assert_false(r.headers.has("dpr-received"), "dpr-received"); >+ assert_false(r.headers.has("viewport-width-received"), "viewport-width-received"); >+ assert_false(r.headers.has("rtt-received"), "rtt-received"); >+ assert_false(r.headers.has("downlink-received"), "downlink-received"); >+ assert_false(r.headers.has("ect-received"), "ect-received"); >+ }); >+}, "Cross-Origin Accept-CH header test"); >+ >+ >+ >+</script> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html.headers b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..4f3a57b865b8b58fd5c037976880de8e6cc184da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html.headers >@@ -0,0 +1 @@ >+Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cb9419aa3db2ace88a3b9f0529bc17335f1d0020 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Accept-CH header test >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..70ccab8c80d0576a1f745703c77351fe21785fb6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html >@@ -0,0 +1,26 @@ >+<html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+promise_test(t => { >+ return fetch("/client-hints/echo_client_hints_received.py").then(r => { >+ assert_equals(r.status, 200) >+ // Verify that the browser does not include client hints in the headers >+ // since Accept-CH is malformed (includes whitespace between attributes >+ // instead of comma). >+ assert_false(r.headers.has("device-memory-received"), "device-memory-received"); >+ assert_false(r.headers.has("dpr-received"), "dpr-received"); >+ assert_false(r.headers.has("viewport-width-received"), "viewport-width-received"); >+ assert_false(r.headers.has("rtt-received"), "rtt-received"); >+ assert_false(r.headers.has("downlink-received"), "downlink-received"); >+ assert_false(r.headers.has("ect-received"), "ect-received"); >+ }); >+}, "Accept-CH header test"); >+ >+</script> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html.headers b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..6d23758273ba2cc4a7ec865a523b549cd8a49875 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html.headers >@@ -0,0 +1 @@ >+Accept-CH: device-memory dpr >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/echo_client_hints_received.py b/LayoutTests/imported/w3c/web-platform-tests/client-hints/echo_client_hints_received.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8f2ccaa2884f0382bdc4ef48b82b9c18b6093171 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/echo_client_hints_received.py >@@ -0,0 +1,20 @@ >+def main(request, response): >+ """ >+ Simple handler that sets a response header based on which client hint >+ request headers were received. >+ """ >+ >+ response.headers.append("Access-Control-Allow-Origin", "*") >+ >+ if "device-memory" in request.headers: >+ response.headers.set("device-memory-received", request.headers.get("device-memory")) >+ if "dpr" in request.headers: >+ response.headers.set("dpr-received", request.headers.get("dpr")) >+ if "viewport-width" in request.headers: >+ response.headers.set("viewport-width-received", request.headers.get("viewport-width")) >+ if "rtt" in request.headers: >+ response.headers.set("rtt-received", request.headers.get("rtt")) >+ if "downlink" in request.headers: >+ response.headers.set("downlink-received", request.headers.get("downlink")) >+ if "ect" in request.headers: >+ response.headers.set("ect-received", request.headers.get("ect")) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/client-hints/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/client-hints/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..17f06bc935d403e30bdd073da7d0f471c9d9733f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/client-hints/w3c-import.log >@@ -0,0 +1,24 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.http.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch.sub.https.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/accept_ch_malformed_header.https.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/client-hints/echo_client_hints_received.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/arrays.js b/LayoutTests/imported/w3c/web-platform-tests/common/arrays.js >new file mode 100644 >index 0000000000000000000000000000000000000000..49431dd78adf85b88682fe7dc5f139f16696f0bb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/common/arrays.js >@@ -0,0 +1,16 @@ >+// Returns true if the given arrays are equal. Optionally can pass an equality function. >+export function areArraysEqual(a, b, equalityFunction = (c, d) => { return c === d; }) { >+ try { >+ if (a.length !== b.length) >+ return false; >+ >+ for (let i = 0; i < a.length; i++) { >+ if (!equalityFunction(a[i], b[i])) >+ return false; >+ } >+ } catch (ex) { >+ return false; >+ } >+ >+ return true; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/css-paint-tests.js b/LayoutTests/imported/w3c/web-platform-tests/common/css-paint-tests.js >deleted file mode 100644 >index cd57332758e0109ce54ae0c1c25f09ec8ca3774c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/common/css-paint-tests.js >+++ /dev/null >@@ -1,18 +0,0 @@ >-// To make sure that we take the snapshot at the right time, we do double >-// requestAnimationFrame. In the second frame, we take a screenshot, that makes >-// sure that we already have a full frame. >-function importPaintWorkletAndTerminateTestAfterAsyncPaint(code) { >- if (typeof CSS.paintWorklet == "undefined") { >- takeScreenshot(); >- } else { >- var blob = new Blob([code], {type: 'text/javascript'}); >- CSS.paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { >- requestAnimationFrame(function() { >- requestAnimationFrame(function() { >- takeScreenshot(); >- }); >- }); >- }); >- } >-} >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/performance-timeline-utils.js b/LayoutTests/imported/w3c/web-platform-tests/common/performance-timeline-utils.js >index 3beb28e9bf7dad6f4551701b8f521bbb6be52fc7..6845d6cbc689fc5183c2bc07f381299bc51da1dc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/common/performance-timeline-utils.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/common/performance-timeline-utils.js >@@ -36,7 +36,9 @@ function test_entries(actualEntries, expectedEntries) { > return actualEntry[key] !== expectedEntry[key] > }) === 'undefined' > }) >- test_true(!!foundEntry) >- assert_object_equals(foundEntry.toJSON(), expectedEntry) >+ test_true(!!foundEntry, `Entry ${JSON.stringify(expectedEntry)} could not be found.`) >+ if (foundEntry) { >+ assert_object_equals(foundEntry.toJSON(), expectedEntry) >+ } > }) > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/subset-tests.js b/LayoutTests/imported/w3c/web-platform-tests/common/subset-tests.js >new file mode 100644 >index 0000000000000000000000000000000000000000..1810320e66085660991cff8f83a2a29dc5eb96cc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/common/subset-tests.js >@@ -0,0 +1,33 @@ >+// Only test a subset of tests with, e.g., ?1-10 in the URL. >+// Can be used together with <meta name="variant" content="..."> >+// Sample usage: >+// for (const test of tests) { >+// subsetTest(async_test, test.fn, test.name); >+// } >+(function() { >+ var subTestStart = 0; >+ var subTestEnd = Infinity; >+ var match; >+ if (location.search) { >+ match = /(?:^\?|&)(\d+)-(\d+|last)(?:&|$)/.exec(location.search); >+ if (match) { >+ subTestStart = parseInt(match[1], 10); >+ if (match[2] !== "last") { >+ subTestEnd = parseInt(match[2], 10); >+ } >+ } >+ } >+ function shouldRunSubTest(currentSubTest) { >+ return currentSubTest >= subTestStart && currentSubTest <= subTestEnd; >+ } >+ var currentSubTest = 0; >+ function subsetTest(testFunc, ...args) { >+ currentSubTest++; >+ if (shouldRunSubTest(currentSubTest)) { >+ return testFunc(...args); >+ } >+ return null; >+ } >+ self.shouldRunSubTest = shouldRunSubTest; >+ self.subsetTest = subsetTest; >+})(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/vendor-prefix.js.headers b/LayoutTests/imported/w3c/web-platform-tests/common/vendor-prefix.js.headers >deleted file mode 100644 >index 6805c323df5a975231648b830e33ce183c3cbbd3..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/common/vendor-prefix.js.headers >+++ /dev/null >@@ -1 +0,0 @@ >-Content-Type: text/javascript; charset=utf-8 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/common/w3c-import.log >index 4cd25e60a6535f926fa18afa013e1288e860ce2e..606a521a16525324dfbe9443a01e3a2bc9df58b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/common/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/common/w3c-import.log >@@ -19,6 +19,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/common/PrefixedLocalStorage.js.headers > /LayoutTests/imported/w3c/web-platform-tests/common/PrefixedPostMessage.js > /LayoutTests/imported/w3c/web-platform-tests/common/PrefixedPostMessage.js.headers >+/LayoutTests/imported/w3c/web-platform-tests/common/arrays.js > /LayoutTests/imported/w3c/web-platform-tests/common/blank.html > /LayoutTests/imported/w3c/web-platform-tests/common/canvas-frame.css > /LayoutTests/imported/w3c/web-platform-tests/common/canvas-frame.css.headers >@@ -30,7 +31,6 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/common/canvas-tests.css.headers > /LayoutTests/imported/w3c/web-platform-tests/common/canvas-tests.js > /LayoutTests/imported/w3c/web-platform-tests/common/canvas-tests.js.headers >-/LayoutTests/imported/w3c/web-platform-tests/common/css-paint-tests.js > /LayoutTests/imported/w3c/web-platform-tests/common/css-paint-tests.js.headers > /LayoutTests/imported/w3c/web-platform-tests/common/css-red.txt > /LayoutTests/imported/w3c/web-platform-tests/common/domain-setter.sub.html >@@ -54,9 +54,10 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/common/reftest-wait.js.headers > /LayoutTests/imported/w3c/web-platform-tests/common/stringifiers.js > /LayoutTests/imported/w3c/web-platform-tests/common/stringifiers.js.headers >+/LayoutTests/imported/w3c/web-platform-tests/common/subset-tests.js > /LayoutTests/imported/w3c/web-platform-tests/common/test-setting-immutable-prototype.js > /LayoutTests/imported/w3c/web-platform-tests/common/test-setting-immutable-prototype.js.headers > /LayoutTests/imported/w3c/web-platform-tests/common/text-plain.txt > /LayoutTests/imported/w3c/web-platform-tests/common/utils.js > /LayoutTests/imported/w3c/web-platform-tests/common/utils.js.headers >-/LayoutTests/imported/w3c/web-platform-tests/common/vendor-prefix.js.headers >+/LayoutTests/imported/w3c/web-platform-tests/common/worklet-reftest.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/common/worklet-reftest.js b/LayoutTests/imported/w3c/web-platform-tests/common/worklet-reftest.js >new file mode 100644 >index 0000000000000000000000000000000000000000..abdda5b05e7f596fb4167903b239aad74fdba8d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/common/worklet-reftest.js >@@ -0,0 +1,33 @@ >+// Imports code into a worklet. E.g. >+// >+// importWorklet(CSS.paintWorklet, {url: 'script.js'}); >+// importWorklet(CSS.paintWorklet, '/* javascript string */'); >+function importWorklet(worklet, code) { >+ let url; >+ if (typeof code === 'object') { >+ url = code.url; >+ } else { >+ const blob = new Blob([code], {type: 'text/javascript'}); >+ url = URL.createObjectURL(blob); >+ } >+ >+ return worklet.addModule(url); >+} >+ >+// To make sure that we take the snapshot at the right time, we do double >+// requestAnimationFrame. In the second frame, we take a screenshot, that makes >+// sure that we already have a full frame. >+async function importWorkletAndTerminateTestAfterAsyncPaint(worklet, code) { >+ if (typeof worklet === 'undefined') { >+ takeScreenshot(); >+ return; >+ } >+ >+ await importWorklet(worklet, code); >+ >+ requestAnimationFrame(function() { >+ requestAnimationFrame(function() { >+ takeScreenshot(); >+ }); >+ }); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..6e762960c8f5069c0831f4627a74f5412735e115 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/OWNERS >@@ -0,0 +1,2 @@ >+@bsittler >+@pwnall >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/README.md b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/README.md >new file mode 100644 >index 0000000000000000000000000000000000000000..c406dcc774e0df8f7805c21cd7421fb0facedf28 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/README.md >@@ -0,0 +1,28 @@ >+This directory contains tests for the >+[Async Cookies API](https://github.com/WICG/cookie-store). >+ >+## Note on cookie naming conventions >+ >+A simple origin cookie is a cookie named with the `__Host-` prefix >+which is always secure-flagged, always implicit-domain, always >+`/`-scoped, and hence always unambiguous in the cookie jar serialization >+and origin-scoped. It can be treated as a simple key/value pair. >+ >+`"LEGACY"` in a cookie name here means it is an old-style unprefixed >+cookie name, so you can't tell e.g. whether it is Secure-flagged or >+`/`-pathed just by looking at it, and its flags, domain and path may >+vary even in a single cookie jar serialization leading to apparent >+duplicate entries, ambiguities, and complexity (i.e. it cannot be >+treated as a simple key/value pair.) >+ >+Cookie names used in the tests are intended to be >+realistic. Traditional session cookie names are typically >+all-upper-case for broad framework compatibility. The more modern >+`"__Host-"` prefix has only one allowed casing. An expected upgrade >+path from traditional "legacy" cookie names to simple origin cookie >+names is simply to prefix the traditional name with the `"__Host-"` >+prefix. >+ >+Many of the used cookie names are non-ASCII to ensure >+straightforward internationalization is possible at every API surface. >+These work in many modern browsers, though not yet all of them. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..974d16bc2cb59f49130f2d0fc4614d81815bc050 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js >@@ -0,0 +1,171 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await cookieStore.delete('cookie-name'); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+}, 'cookieStore.delete with positional name'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await cookieStore.delete({ name: 'cookie-name' }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.delete with name in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.delete( >+ 'cookie-name', { name: 'cookie-name' })); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.delete with name in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.delete( >+ 'cookie-name', { value: 'cookie-value' })); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.delete with value in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; >+ const tenYearsAgo = Date.now() - tenYears; >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.delete( >+ 'cookie-name', { expires: tenYearsAgo })); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.delete with expires in options'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: currentDomain }); >+ >+ await cookieStore.delete('cookie-name', { domain: currentDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: currentDomain }) >+ }); >+}, 'cookieStore.delete with domain set to the current hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ const subDomain = `sub.${currentDomain}`; >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: currentDomain }); >+ >+ await cookieStore.delete('cookie-name', { domain: subDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: currentDomain }) >+ }); >+}, 'cookieStore.delete with domain set to a subdomain of the current hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: currentDomain }); >+ >+ await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: currentDomain }) >+ }); >+}, 'cookieStore.delete with name in options and domain set to the current ' + >+ 'hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ const subDomain = `sub.${currentDomain}`; >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: currentDomain }); >+ >+ await cookieStore.delete({ name: 'cookie-name', domain: subDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: currentDomain }) >+ }); >+}, 'cookieStore.delete with name in options and domain set to a subdomain of ' + >+ 'the current hostname'); >+ >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentPath = currentUrl.pathname; >+ const currentDirectory = >+ currentPath.substr(0, currentPath.lastIndexOf('/') + 1); >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { path: currentDirectory }); >+ >+ await cookieStore.delete('cookie-name', { path: currentDirectory }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { path: currentDirectory }) >+ }); >+}, 'cookieStore.delete with path set to the current directory'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentPath = currentUrl.pathname; >+ const currentDirectory = >+ currentPath.substr(0, currentPath.lastIndexOf('/') + 1); >+ const subDirectory = currentDirectory + "subdir/"; >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { path: currentDirectory }); >+ >+ await cookieStore.delete('cookie-name', { path: subDirectory }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { path: currentDirectory }) >+ }); >+}, 'cookieStore.delete with path set to subdirectory of the current directory'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..8a3f7ed66da0cc7d6e6d2e07a3d6fa345e28d9b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js >@@ -0,0 +1,10 @@ >+'use strict'; >+ >+promise_test(async testCase => { >+ const p = cookieStore.delete('cookie-name'); >+ assert_true(p instanceof Promise, >+ 'cookieStore.delete() returns a promise'); >+ const result = await p; >+ assert_equals(result, undefined, >+ 'cookieStore.delete() promise resolves to undefined'); >+}, 'cookieStore.delete return type is Promise<void>'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bcb698eeb0d6ce760033ba628120ebf7772a1084 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js >@@ -0,0 +1,65 @@ >+'use strict'; >+ >+test(() => { >+ const event = new CookieChangeEvent('change'); >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 0); >+ assert_equals(event.deleted.length, 0); >+}, 'CookieChangeEvent construction with default arguments'); >+ >+test(() => { >+ const event = new CookieChangeEvent('change', { >+ changed: [ >+ { name: 'changed-name1', value: 'changed-value1' }, >+ { name: 'changed-name2', value: 'changed-value2' }, >+ ], >+ }); >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 2); >+ assert_equals(event.changed[0].name, 'changed-name1'); >+ assert_equals(event.changed[0].value, 'changed-value1'); >+ assert_equals(event.changed[1].name, 'changed-name2'); >+ assert_equals(event.changed[1].value, 'changed-value2'); >+ assert_equals(event.deleted.length, 0); >+}, 'CookieChangeEvent construction with changed cookie list'); >+ >+test(() => { >+ const event = new CookieChangeEvent('change', { >+ deleted: [ >+ { name: 'deleted-name1', value: 'deleted-value1' }, >+ { name: 'deleted-name2', value: 'deleted-value2' }, >+ ], >+ }); >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 0); >+ assert_equals(event.deleted.length, 2); >+ assert_equals(event.deleted[0].name, 'deleted-name1'); >+ assert_equals(event.deleted[0].value, 'deleted-value1'); >+ assert_equals(event.deleted[1].name, 'deleted-name2'); >+ assert_equals(event.deleted[1].value, 'deleted-value2'); >+}, 'CookieChangeEvent construction with deleted cookie list'); >+ >+test(() => { >+ const event = new CookieChangeEvent('change', { >+ changed: [ >+ { name: 'changed-name1', value: 'changed-value1' }, >+ { name: 'changed-name2', value: 'changed-value2' }, >+ ], >+ deleted: [ >+ { name: 'deleted-name1', value: 'deleted-value1' }, >+ ], >+ }); >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 2); >+ assert_equals(event.changed[0].name, 'changed-name1'); >+ assert_equals(event.changed[0].value, 'changed-value1'); >+ assert_equals(event.changed[1].name, 'changed-name2'); >+ assert_equals(event.changed[1].value, 'changed-value2'); >+ assert_equals(event.deleted.length, 1); >+ assert_equals(event.deleted[0].name, 'deleted-name1'); >+ assert_equals(event.deleted[0].value, 'deleted-value1'); >+}, 'CookieChangeEvent construction with changed and deleted cookie lists'); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7f6d2d919d496be7135bae0536841611d208afea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js >@@ -0,0 +1,29 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ const eventPromise = new Promise((resolve) => { >+ cookieStore.onchange = resolve; >+ }); >+ >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const event = await eventPromise; >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 1); >+ assert_equals(event.changed[0].name, 'cookie-name'); >+ assert_equals(event.changed[0].value, 'cookie-value'); >+ assert_equals(event.deleted.length, 0); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore fires change event for cookie set by cookieStore.set()'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..f84b2e067451d883b5819ae4d4b8648a38aba3b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js >@@ -0,0 +1,31 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const eventPromise = new Promise((resolve) => { >+ cookieStore.onchange = resolve; >+ }); >+ await cookieStore.delete('cookie-name'); >+ const event = await eventPromise; >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.deleted.length, 1); >+ assert_equals(event.deleted[0].name, 'cookie-name'); >+ assert_equals( >+ event.deleted[0].value, undefined, >+ 'Cookie change events for deletions should not have cookie values'); >+ assert_equals(event.changed.length, 0); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore fires change event for cookie deleted by cookieStore.delete()'); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2a5cb5d064f912eb8d6583427360afd280bb7a23 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js >@@ -0,0 +1,31 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const eventPromise = new Promise((resolve) => { >+ cookieStore.onchange = resolve; >+ }); >+ >+ await cookieStore.set('cookie-name', 'new-cookie-value'); >+ >+ const event = await eventPromise; >+ assert_true(event instanceof CookieChangeEvent); >+ assert_equals(event.type, 'change'); >+ assert_equals(event.changed.length, 1); >+ assert_equals(event.changed[0].name, 'cookie-name'); >+ assert_equals(event.changed[0].value, 'new-cookie-value'); >+ assert_equals(event.deleted.length, 0); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore fires change event for cookie overwritten by cookieStore.set()'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4519a1eabda12b919adea76ec5b2cc53c84dc4f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js >@@ -0,0 +1,119 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ const cookies = await cookieStore.getAll(); >+ cookies.sort((a, b) => a.name.localeCompare(b.name)); >+ assert_equals(cookies.length, 2); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ assert_equals(cookies[1].name, 'cookie-name-2'); >+ assert_equals(cookies[1].value, 'cookie-value-2'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with no arguments'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ const cookies = await cookieStore.getAll('cookie-name'); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with positional name'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ const cookies = await cookieStore.getAll({ name: 'cookie-name' }); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with name in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.get( >+ 'cookie-name', { name: 'cookie-name' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with name in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookies = await cookieStore.getAll( >+ 'cookie-name', { matchType: 'equals' }); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ >+ const no_cookies = await cookieStore.getAll( >+ 'cookie-na', { matchType: 'equals' }); >+ assert_equals(no_cookies.length, 0); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.getAll with matchType explicitly set to equals'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ const cookies = await cookieStore.getAll( >+ 'cookie-name-', { matchType: 'startsWith' }); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name-2'); >+ assert_equals(cookies[0].value, 'cookie-value-2'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with matchType set to startsWith'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.getAll( >+ 'cookie-name', { matchType: 'invalid' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with invalid matchType'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ >+ const cookies = await cookieStore.getAll( >+ { matchType: 'startsWith', name: 'cookie-name-' }); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name-2'); >+ assert_equals(cookies[0].value, 'cookie-value-2'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+}, 'cookieStore.getAll with matchType set to startsWith and name in options'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..aa0a4ea9a03eaa96144ed62a6458ffbb183a97c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js >@@ -0,0 +1,22 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ const cookies = await cookieStore.getAll('cookie-name'); >+ >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.getAll returns the cookie written by cookieStore.set'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..66d815f3053bbc7e69bf7ba3beb2347e008d20ab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js >@@ -0,0 +1,86 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with positional name'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get({ name: 'cookie-name' }); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with name in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.get( >+ 'cookie-name', { name: 'cookie-name' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with name in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get( >+ 'cookie-name', { matchType: 'equals' }); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ const no_cookie = await cookieStore.get( >+ 'cookie-na', { matchType: 'equals' }); >+ assert_equals(no_cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with matchType explicitly set to equals'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get( >+ 'cookie-na', { matchType: 'startsWith' }); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with matchType set to startsWith'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.get( >+ 'cookie-name', { matchType: 'invalid' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with invalid matchType'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get( >+ { matchType: 'startsWith', name: 'cookie-na' }); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get with matchType set to startsWith and name in options'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..fc9645d3e2e98063da8cf03ef50823af363c6b9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js >@@ -0,0 +1,20 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.delete('cookie-name'); >+ const cookie = await cookieStore.get(); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get returns null for a cookie deleted by cookieStore.delete'); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2a082de9d30927ec5ee152acdd76cde04ed730d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js >@@ -0,0 +1,21 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ const cookie = await cookieStore.get('cookie-name'); >+ >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.get returns the cookie written by cookieStore.set'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..c013b7200947ca3a7f201f2596773d381e97c1b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js >@@ -0,0 +1,92 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.delete('cookie-name-2'); >+ >+ const has_cookie = await cookieStore.has('cookie-name'); >+ assert_equals(has_cookie, true); >+ const has_cookie2 = await cookieStore.has('cookie-name-2'); >+ assert_equals(has_cookie2, false); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with positional name'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.delete('cookie-name-2'); >+ >+ const has_cookie = await cookieStore.has({ name: 'cookie-name' }); >+ assert_equals(has_cookie, true); >+ const has_cookie2 = await cookieStore.has({ name: 'cookie-name-2' }); >+ assert_equals(has_cookie2, false); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with name in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.has( >+ 'cookie-name', { name: 'cookie-name' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with name in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const has_cookie = await cookieStore.has( >+ 'cookie-na', { matchType: 'equals' }); >+ assert_equals(has_cookie, false); >+ const has_cookie2 = await cookieStore.has( >+ 'cookie-name', { matchType: 'equals' }); >+ assert_equals(has_cookie2, true); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with matchType explicitly set to equals'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const has_cookie = await cookieStore.has( >+ 'cookie-na', { matchType: 'startsWith' }); >+ assert_equals(has_cookie, true); >+ const has_cookie2 = await cookieStore.has( >+ 'cookie-name-', { matchType: 'startsWith' }); >+ assert_equals(has_cookie2, false); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with matchType set to startsWith'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.has( >+ 'cookie-name', { matchType: 'invalid' })); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with invalid matchType'); >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const has_cookie = await cookieStore.has( >+ { matchType: 'startsWith', name: 'cookie-na' }); >+ assert_equals(has_cookie, true); >+ const has_cookie2 = await cookieStore.has( >+ { matchType: 'startsWith', name: 'cookie-name-' }); >+ assert_equals(has_cookie2, false); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has with matchType set to startsWith and name in options'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..0bef0b18dbc554b52b485546f1f673638148e6fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js >@@ -0,0 +1,25 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ assert_equals(await cookieStore.has('cookie-name'), true); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has returns true for cookie set by cookieStore.set()'); >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ assert_equals(await cookieStore.has('cookie-name'), false); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.has returns false for cookie deleted by cookieStore.delete()'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..986560e333083fbc1347c91fb356d3a26b69f6ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL cookieStore on DOMWindow of detached iframe (crbug.com/774626) assert_equals: expected (undefined) undefined but got (object) null >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..08a7b5b8e4629440956943489dd7fa7ca200b537 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>cookieStore on DOMWindow of detached iframe (crbug.com/774626)</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<iframe id="iframe"></iframe> >+<script> >+'use strict'; >+ >+test(() => { >+ const iframe = document.getElementById('iframe'); >+ const frameWindow = iframe.contentWindow; >+ >+ iframe.parentNode.removeChild(iframe); >+ assert_equals(null, frameWindow.cookieStore); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..9656acfa8e9d3ee4649ee534fe9163f9cd95057e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js >@@ -0,0 +1,215 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with positional name and value'); >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with name and value in options'); >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.set( >+ 'cookie-name', 'cookie-value', { name: 'cookie-name' })); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with name in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ >+ await promise_rejects(testCase, new TypeError(), cookieStore.set( >+ 'cookie-name', 'cookie-value', { value: 'cookie-value' })); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with value in both positional arguments and options'); >+ >+promise_test(async testCase => { >+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; >+ const tenYearsFromNow = Date.now() + tenYears; >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { expires: tenYearsFromNow }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with expires in the future'); >+ >+promise_test(async testCase => { >+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; >+ const tenYearsAgo = Date.now() - tenYears; >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { expires: tenYearsAgo }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with expires in the past'); >+ >+promise_test(async testCase => { >+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; >+ const tenYearsFromNow = Date.now() + tenYears; >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set( >+ { name: 'cookie-name', value: 'cookie-value', expires: tenYearsFromNow }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with name and value in options and expires in the future'); >+ >+promise_test(async testCase => { >+ const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; >+ const tenYearsAgo = Date.now() - tenYears; >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set( >+ { name: 'cookie-name', value: 'cookie-value', expires: tenYearsAgo }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with name and value in options and expires in the past'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ await cookieStore.delete('cookie-name', { domain: currentDomain }); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: currentDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: currentDomain }); >+ }); >+}, 'cookieStore.set with domain set to the current hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ const subDomain = `sub.${currentDomain}`; >+ await cookieStore.delete('cookie-name', { domain: currentDomain }); >+ await cookieStore.delete('cookie-name', { domain: subDomain }); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { domain: subDomain }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { domain: subDomain }); >+ }); >+}, 'cookieStore.set with domain set to a subdomain of the current hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentDomain = currentUrl.hostname; >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set('cookie-name', 'cookie-old-value'); >+ await cookieStore.set( >+ 'cookie-name', 'cookie-new-value', { domain: currentDomain }); >+ >+ const cookies = await cookieStore.getAll('cookie-name'); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-new-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name'); >+ await cookieStore.delete('cookie-name', { domain: currentDomain }); >+ }); >+}, 'cookieStore.set default domain is current hostname'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentPath = currentUrl.pathname; >+ const currentDirectory = >+ currentPath.substr(0, currentPath.lastIndexOf('/') + 1); >+ await cookieStore.delete('cookie-name', { path: currentDirectory }); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { path: currentDirectory }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { path: currentDirectory }); >+ }); >+}, 'cookieStore.set with path set to the current directory'); >+ >+promise_test(async testCase => { >+ const currentUrl = new URL(self.location.href); >+ const currentPath = currentUrl.pathname; >+ const currentDirectory = >+ currentPath.substr(0, currentPath.lastIndexOf('/') + 1); >+ const subDirectory = currentDirectory + "subdir/"; >+ await cookieStore.delete('cookie-name', { path: currentDirectory }); >+ await cookieStore.delete('cookie-name', { path: subDirectory }); >+ >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { path: subDirectory }); >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie, null); >+ >+ await async_cleanup(async () => { >+ await cookieStore.delete('cookie-name', { path: subDirectory }); >+ }); >+}, 'cookieStore.set with path set to a subdirectory of the current directory'); >+ >+promise_test(async testCase => { >+ await cookieStore.delete('cookie-name'); >+ >+ await cookieStore.set('cookie-name', 'cookie-old-value'); >+ await cookieStore.set('cookie-name', 'cookie-new-value', { path: '/' }); >+ >+ const cookies = await cookieStore.getAll('cookie-name'); >+ assert_equals(cookies.length, 1); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-new-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name', { path: '/' })); >+}, 'cookieStore.set default path is /'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..6f3e6f4980e21ea8b16571420c75e3f03a14e41d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js >@@ -0,0 +1,59 @@ >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ const inTwentyFourHours = new Date(Date.now() + 24 * 60 * 60 * 1000); >+ >+ assert_equals( >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }), >+ undefined); >+ >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with expires option: Date object'); >+ >+promise_test(async testCase => { >+ const inTwentyFourHours = Date.now() + 24 * 60 * 60 * 1000; >+ >+ assert_equals( >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { expires: inTwentyFourHours }), >+ undefined); >+ >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with expires option: milliseconds since epoch object'); >+ >+promise_test(async testCase => { >+ const year = (new Date()).getUTCFullYear() + 1; >+ const date = new Date('07 Jun ' + year + ' 07:07:07 UTC'); >+ const day = ('Sun Mon Tue Wed Thu Fri Sat'.split(' '))[date.getUTCDay()]; >+ const nextJune = `${day}, 07 Jun ${year} + ' 07:07:07 GMT`; >+ >+ assert_equals( >+ await cookieStore.set( >+ 'cookie-name', 'cookie-value', { expires: nextJune }), >+ undefined); >+ >+ const cookie = await cookieStore.get('cookie-name'); >+ assert_equals(cookie.name, 'cookie-name'); >+ assert_equals(cookie.value, 'cookie-value'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+}, 'cookieStore.set with expires option: HTTP date string'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cefa27adb3ab999348a16faafcdca6b388066c90 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative-expected.txt >@@ -0,0 +1,12 @@ >+ >+FAIL cookieStore.set with __Secure- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set of expired __Secure- cookie on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with __Secure- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with __Secure- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with __Secure- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with __Host- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set of expired __Host- cookie on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with __Host- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with __Host- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with __Host- name on non-secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9859e100521c34159a0e4902652a9b27b0ca7802 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html >@@ -0,0 +1,71 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Cookie Store: cookieStore handles special cookie names correctly</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+['__Secure-', '__Host-'].forEach(prefix => { >+ promise_test(async testCase => { >+ await promise_rejects( >+ testCase, new TypeError(), >+ cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`), >+ `Setting ${prefix} cookies should fail in non-secure contexts`); >+ >+ try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} >+ }, `cookieStore.set with ${prefix} name on non-secure origin`); >+ >+ promise_test(async testCase => { >+ await promise_rejects( >+ testCase, new TypeError(), >+ cookieStore.set( >+ `${prefix}cookie-name`, `secure-cookie-value`, { >+ expires: Date.now() - (24 * 60 * 60 * 1000) >+ }), >+ `Setting expired ${prefix} cookies should fail in non-secure contexts`); >+ >+ try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} >+ }, `cookieStore.set of expired ${prefix} cookie on non-secure origin`); >+ >+ promise_test(async testCase => { >+ assert_equals( >+ await cookieStore.get(`${prefix}cookie-name`), >+ null, >+ 'get with ${prefix} prefix should not reject'); >+ assert_equals( >+ await cookieStore.get({name: `${prefix}cookie-name`}), >+ null, >+ 'get with ${prefix} prefix name option should not reject'); >+ assert_equals( >+ await cookieStore.get({name: prefix, matchType: 'startsWith'}), >+ null, >+ 'get with ${prefix} name and startsWith options should not reject'); >+ }, `cookieStore.get with ${prefix} name on non-secure origin`); >+ >+ promise_test(async testCase => { >+ assert_array_equals( >+ await cookieStore.getAll(`${prefix}cookie-name`), >+ [], >+ 'getAll with ${prefix} prefix should not reject'); >+ assert_array_equals( >+ await cookieStore.getAll({name: `${prefix}cookie-name`}), >+ [], >+ 'getAll with ${prefix} prefix name option should not reject'); >+ assert_array_equals( >+ await cookieStore.getAll({name: prefix, matchType: 'startsWith'}), >+ [], >+ 'getAll with ${prefix} name and startsWith options should not reject'); >+ }, `cookieStore.getAll with ${prefix} name on non-secure origin`); >+ >+ promise_test(async testCase => { >+ await promise_rejects( >+ testCase, new TypeError(), >+ cookieStore.delete(`${prefix}cookie-name`, `host-cookie-value`), >+ `Deleting ${prefix} cookies should fail in non-secure contexts`); >+ }, `cookieStore.delete with ${prefix} name on non-secure origin`); >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..da81c6d616b570b48720d00fcce5059f2412da3b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https-expected.txt >@@ -0,0 +1,8 @@ >+ >+FAIL cookieStore.set with __Secure- name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set of expired __Secure- cookie name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with __Secure- name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with __Host- name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set of expired __Host- cookie name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with __Host- name on secure origin promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0d1be12fa1826da443204c643253997df90e3b18 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html >@@ -0,0 +1,41 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Cookie Store: cookieStore handles special cookie names correctly (secure context)</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+['__Secure-', '__Host-'].forEach(prefix => { >+ promise_test(async testCase => { >+ await cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`); >+ assert_equals( >+ (await cookieStore.get(`${prefix}cookie-name`)).value, >+ 'secure-cookie-value', >+ `Setting ${prefix} cookies should not fail in secure context`); >+ >+ try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} >+ }, `cookieStore.set with ${prefix} name on secure origin`); >+ >+ promise_test(async testCase => { >+ // This test is for symmetry with the non-secure case. In non-secure >+ // contexts, the set() should fail even if the expiration date makes >+ // the operation a no-op. >+ await cookieStore.set( >+ `${prefix}cookie-name`, `secure-cookie-value`, { >+ expires: Date.now() - (24 * 60 * 60 * 1000) >+ }); >+ assert_equals(await cookieStore.get(`${prefix}cookie-name`), null); >+ try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} >+ }, `cookieStore.set of expired ${prefix} cookie name on secure origin`); >+ >+ promise_test(async testCase => { >+ assert_equals( >+ await cookieStore.delete(`${prefix}cookie-name`), undefined, >+ `Deleting ${prefix} cookies should not fail in secure context`); >+ }, `cookieStore.delete with ${prefix} name on secure origin`); >+}); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..670e4ef1b7c3a3c37f4c3f5cd7931d0466aec6de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative-expected.txt >@@ -0,0 +1,6 @@ >+ >+FAIL document.cookie set/overwrite/delete observed by CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore set/overwrite/delete observed by document.cookie promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore agrees with document.cookie on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL document.cookie agrees with CookieStore on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f5528d2d96cbc86a2cbd14141aaa7959dd5166f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: document.cookie</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/document_cookie.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..670e4ef1b7c3a3c37f4c3f5cd7931d0466aec6de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https-expected.txt >@@ -0,0 +1,6 @@ >+ >+FAIL document.cookie set/overwrite/delete observed by CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore set/overwrite/delete observed by document.cookie promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore agrees with document.cookie on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL document.cookie agrees with CookieStore on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..63ddd9f63bc44103fd58bf488b03669684528a43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: document.cookie (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/document_cookie.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8a06ad7ffbb9622a674c6d187994f94c34128568 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL cookieStore.getAll returns multiple cookies written by cookieStore.set promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82fd2e6358d00fd133495fa53bee476a9c9bea3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html >@@ -0,0 +1,41 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: cookieStore.getAll() sees cookieStore.set() cookie</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+promise_test(async testCase => { >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ await cookieStore.set('cookie-name-2', 'cookie-value-2'); >+ await cookieStore.set('cookie-name-3', 'cookie-value-3'); >+ >+ const cookies = await cookieStore.getAll(); >+ cookies.sort((a, b) => a.name.localeCompare(b.name)); >+ assert_equals(cookies.length, 3); >+ assert_equals(cookies[0].name, 'cookie-name'); >+ assert_equals(cookies[0].value, 'cookie-value'); >+ assert_equals(cookies[1].name, 'cookie-name-2'); >+ assert_equals(cookies[1].value, 'cookie-value-2'); >+ assert_equals(cookies[2].name, 'cookie-name-3'); >+ assert_equals(cookies[2].value, 'cookie-value-3'); >+ >+ await async_cleanup(() => cookieStore.delete('cookie-name')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-2')); >+ await async_cleanup(() => cookieStore.delete('cookie-name-3')); >+}, 'cookieStore.getAll returns multiple cookies written by cookieStore.set'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a38214193e476e312da785dfd21b244ae2ad2bbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL HTTP set/overwrite/delete observed in CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore agreed with HTTP headers agree on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore set/overwrite/delete observed in HTTP headers promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL HTTP headers agreed with CookieStore on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL Binary HTTP set/overwrite/delete observed in CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4370350a94861745a6ca65ff048de83be34b4da5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: HTTP Cookie and Set-Cookie headers</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/http_cookie_and_set_cookie_headers.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a38214193e476e312da785dfd21b244ae2ad2bbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL HTTP set/overwrite/delete observed in CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore agreed with HTTP headers agree on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL CookieStore set/overwrite/delete observed in HTTP headers promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL HTTP headers agreed with CookieStore on encoding non-ASCII cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL Binary HTTP set/overwrite/delete observed in CookieStore promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0c3d8b12d46ab587bf9e4f0a6c38768f06cd792d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: HTTP Cookie and Set-Cookie headers (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/http_cookie_and_set_cookie_headers.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/httponly_cookies.window.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/httponly_cookies.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..01239aec58fbd81967a0e7ac47723423fd42b0a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/httponly_cookies.window.js >@@ -0,0 +1,47 @@ >+// META: script=resources/cookie-test-helpers.js >+ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTPONLY-cookie=value; path=/; httponly'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'HttpOnly cookie we wrote using HTTP in cookie jar' + >+ ' is invisible to script'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTPONLY-cookie=value', >+ 'HttpOnly cookie we wrote using HTTP in HTTP cookie jar'); >+ >+ await setCookieStringHttp('HTTPONLY-cookie=new-value; path=/; httponly'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'HttpOnly cookie we overwrote using HTTP in cookie jar' + >+ ' is invisible to script'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTPONLY-cookie=new-value', >+ 'HttpOnly cookie we overwrote using HTTP in HTTP cookie jar'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp( >+ 'HTTPONLY-cookie=DELETED; path=/; max-age=0; httponly'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after HTTP cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after HTTP cookie-clearing using max-age=0'); >+ >+ // HTTPONLY cookie changes should not have been observed; perform >+ // a dummy change to verify that nothing else was queued up. >+ await cookieStore.set('TEST', 'dummy'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'TEST', value: 'dummy'}]}, >+ 'HttpOnly cookie deletion was not observed'); >+}, 'HttpOnly cookies are not observed'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..26b0dc86bbc6edd3f91ee6bfd0c739d581ccc736 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative-expected.txt >@@ -0,0 +1,66 @@ >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+ >+PASS Interface test >+FAIL Window interface: attribute cookieStore assert_own_property: The global object must have a property "cookieStore" expected property "cookieStore" missing >+PASS Unscopable handled correctly for cookieStore property on Window >+PASS WorkerGlobalScope interface: existence and properties of interface object >+PASS DedicatedWorkerGlobalScope interface: existence and properties of interface object >+PASS SharedWorkerGlobalScope interface: existence and properties of interface object >+PASS WorkerNavigator interface: existence and properties of interface object >+PASS WorkerLocation interface: existence and properties of interface object >+PASS ExtendableEvent interface: existence and properties of interface object >+PASS ServiceWorkerGlobalScope interface: existence and properties of interface object >+FAIL CookieStore interface: existence and properties of interface object assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface object length assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface object name assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: operation getAll(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for getAll(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation getAll(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for getAll(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation get(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for get(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation get(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for get(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation has(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for has(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation has(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for has(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation set(USVString, USVString, CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for set(USVString, USVString, CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation set(CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for set(CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation delete(USVString, CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for delete(USVString, CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation delete(CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for delete(CookieStoreSetOptions) on CookieStore >+FAIL CookieStore must be primary interface of self.cookieStore assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL Stringification of self.cookieStore assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "getAll(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling getAll(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "getAll(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling getAll(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "get(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling get(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "get(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling get(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "has(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling has(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "has(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling has(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "set(USVString, USVString, CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling set(USVString, USVString, CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "set(CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling set(CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "delete(USVString, CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling delete(USVString, CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "delete(CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling delete(CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b9cab343ffbdc77c8fb1b609451c9da7d4dbf5e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative.html >@@ -0,0 +1,62 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: IDL tests</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"/> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/WebIDLParser.js"></script> >+<script src="/resources/idlharness.js"></script> >+<script> >+'use strict'; >+ >+promise_test(async t => { >+ const urls = [ >+ '/interfaces/uievents.idl', >+ '/interfaces/dom.idl', >+ '/interfaces/html.idl', >+ '/interfaces/cookie-store.idl' >+ ]; >+ const [uievents, dom, html, cookie_store] = await Promise.all( >+ urls.map(url => fetch(url).then(r => r.text()))); >+ >+ const idl_array = new IdlArray(); >+ >+ // Dependencies of HTML >+ idl_array.add_untested_idls(dom, { only: [ >+ 'Event', >+ 'EventInit', >+ 'EventTarget', >+ 'HTMLCollection', >+ 'NodeList', >+ ] }); >+ idl_array.add_untested_idls('interface Document {};'); >+ idl_array.add_untested_idls('interface Element {};'); >+ idl_array.add_untested_idls('interface LinkStyle {};'); >+ idl_array.add_untested_idls('interface SVGElement {};'); >+ idl_array.add_untested_idls(html); >+ idl_array.add_untested_idls(uievents, { only: [ >+ 'UIEvent', >+ 'UIEventInit', >+ 'MouseEvent', >+ 'MouseEventInit', >+ 'EventModifierInit', >+ ] }); >+ >+ idl_array.add_untested_idls( >+ `dictionary ExtendableEventInit {};`); >+ idl_array.add_untested_idls( >+ `[Global=ExtendableEvent, Exposed=ServiceWorker] >+ interface ExtendableEvent : Event {};`); >+ idl_array.add_untested_idls( >+ `[Global=ServiceWorker, Exposed=ServiceWorker] >+ interface ServiceWorkerGlobalScope {};`); >+ >+ idl_array.add_idls(cookie_store); >+ >+ idl_array.add_objects({ >+ CookieStore: ["self.cookieStore"], >+ CookieChangeEvent: ["new CookieChangeEvent('change')"], >+ }); >+ idl_array.test(); >+}, 'Interface test'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..1b28b2895f186fe79e5b5963c3a8aa2e5a8a7855 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.js >@@ -0,0 +1,45 @@ >+self.GLOBAL = { >+ isWindow: function() { return false; }, >+ isWorker: function() { return true; }, >+}; >+importScripts('/resources/testharness.js', >+ '/resources/WebIDLParser.js', >+ '/resources/idlharness.js'); >+ >+promise_test(async t => { >+ const urls = ['/interfaces/cookie-store.idl']; >+ const [cookie_store] = await Promise.all( >+ urls.map(url => fetch(url).then(response => response.text()))); >+ >+ const idl_array = new IdlArray(); >+ >+ idl_array.add_untested_idls( >+ `[Global=Event, Exposed=ServiceWorker] >+ interface Event {};`); >+ idl_array.add_untested_idls( >+ `[Global=ExtendableEvent, Exposed=ServiceWorker] >+ interface ExtendableEvent : Event {};`); >+ idl_array.add_untested_idls('dictionary EventHandler {};'); >+ idl_array.add_untested_idls('dictionary EventInit {};'); >+ idl_array.add_untested_idls('dictionary ExtendableEventInit {};'); >+ idl_array.add_untested_idls( >+ `[Global=EventTarget, Exposed=ServiceWorker] >+ interface EventTarget {};`); >+ idl_array.add_untested_idls( >+ `[Global=ServiceWorker, Exposed=ServiceWorker] >+ interface ServiceWorkerGlobalScope {};`); >+ idl_array.add_untested_idls( >+ `[Global=Window, Exposed=Window] >+ interface Window {};`); >+ >+ idl_array.add_idls(cookie_store); >+ >+ idl_array.add_objects({ >+ CookieStore: ["self.cookieStore"], >+ ExtendableCookieChangeEvent: [ >+ "new ExtendableCookieChangeEvent('cookiechange')"], >+ }); >+ idl_array.test(); >+}, 'Interface test'); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0e714a5314a233026a1992fd5aea0dc2d1913939 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https-expected.txt >@@ -0,0 +1,54 @@ >+ >+PASS Interface test >+FAIL ServiceWorkerGlobalScope interface: attribute cookieStore assert_own_property: The global object must have a property "cookieStore" expected property "cookieStore" missing >+PASS Unscopable handled correctly for cookieStore property on ServiceWorkerGlobalScope >+PASS Window interface: existence and properties of interface object >+FAIL CookieStore interface: existence and properties of interface object assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface object length assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface object name assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+FAIL CookieStore interface: operation getAll(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for getAll(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation getAll(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for getAll(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation get(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for get(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation get(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for get(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation has(USVString, CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for has(USVString, CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation has(CookieStoreGetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for has(CookieStoreGetOptions) on CookieStore >+FAIL CookieStore interface: operation set(USVString, USVString, CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for set(USVString, USVString, CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation set(CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for set(CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation delete(USVString, CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for delete(USVString, CookieStoreSetOptions) on CookieStore >+FAIL CookieStore interface: operation delete(CookieStoreSetOptions) assert_own_property: self does not have own property "CookieStore" expected property "CookieStore" missing >+PASS Unscopable handled correctly for delete(CookieStoreSetOptions) on CookieStore >+FAIL CookieStore must be primary interface of self.cookieStore assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL Stringification of self.cookieStore assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "getAll(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling getAll(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "getAll(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling getAll(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "get(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling get(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "get(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling get(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "has(USVString, CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling has(USVString, CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "has(CookieStoreGetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling has(CookieStoreGetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "set(USVString, USVString, CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling set(USVString, USVString, CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "set(CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling set(CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "delete(USVString, CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling delete(USVString, CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: self.cookieStore must inherit property "delete(CookieStoreSetOptions)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined" >+FAIL CookieStore interface: calling delete(CookieStoreSetOptions) on self.cookieStore with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..845a9fdd7e05cba85bcb3e7714fb4a82cfd0d23c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: ServiceWorker IDL tests</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+(async () => { >+ const scope = 'does/not/exist'; >+ >+ let registration = await navigator.serviceWorker.getRegistration(scope); >+ if (registration) >+ await registration.unregister(); >+ registration = await navigator.serviceWorker.register( >+ 'idlharness_serviceworker.js', {scope}); >+ >+ fetch_tests_from_worker(registration.installing); >+})(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0b6e95c607ad07c8ebfa23fd3426cc24547815a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify behavior of no-name and no-value cookies. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..79923b5ae8c9e9832e1462b5083db4994e325e54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name and No Value</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_and_no_value.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0b6e95c607ad07c8ebfa23fd3426cc24547815a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify behavior of no-name and no-value cookies. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0f15dafa7ab6e1f1a14afacea512b2491a669c70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name and No Value (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_and_no_value.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..667d2a9e048afe17133dd2f99be6cfa35eaaaa65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify that attempting to set a cookie with no name and with '=' in the value does not work. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..17597038c08e78bba1df19628da1a0a6bda55b03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name, '=' in Value</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_equals_in_value.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..667d2a9e048afe17133dd2f99be6cfa35eaaaa65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify that attempting to set a cookie with no name and with '=' in the value does not work. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..de774550fe91ee7c02643789686f1cad320f8163 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name, '=' in Value (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_equals_in_value.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..77a3c1df126c9c02637cda9345d62343e44ea96b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify behavior of multiple no-name cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..755d1066799d0be64e7a3cea92b51c1628141aff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name, Multiple Values</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_multiple_values.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..77a3c1df126c9c02637cda9345d62343e44ea96b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Verify behavior of multiple no-name cookies promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..29cde813fc35deff841313b0d681e29fe279ea80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: Test No Name, Multiple Values (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/no_name_multiple_values.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7190e744e767c60a639864b843bcb5d653ddec4d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https-expected.txt >@@ -0,0 +1,4 @@ >+ >+FAIL Set three simple origin session cookies sequentially and ensure they all end up in the cookie jar in order. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL Set three simple origin session cookies in undefined order using Promise.all and ensure they all end up in the cookie jar in any order. promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1873ed4e9c0d3efe80cf671ed384eb2007c190c8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Async Cookies: ordering (HTTPS)</title> >+<meta name="help" href="https://github.com/WICG/cookie-store/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/cookie-test-helpers.js"></script> >+<script src="resources/ordering.js"></script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie-test-helpers.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie-test-helpers.js >new file mode 100644 >index 0000000000000000000000000000000000000000..178947ad6eca72967aa9bbc3a13172a0402bc17d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie-test-helpers.js >@@ -0,0 +1,226 @@ >+'use strict'; >+ >+// TODO(jsbell): Once ServiceWorker is supported, add arbitrary path coverage. >+const kPath = location.pathname.replace(/[^/]+$/, ''); >+ >+// True when running in a document context as opposed to a worker context >+const kHasDocument = typeof document !== 'undefined'; >+ >+// True when running on unsecured 'http:' rather than secured 'https:'. >+const kIsUnsecured = location.protocol !== 'https:'; >+ >+const kCookieHelperCgi = 'resources/cookie_helper.py'; >+ >+// Approximate async equivalent to the document.cookie getter but with >+// important differences: optional additional getAll arguments are >+// forwarded, and an empty cookie jar returns undefined. >+// >+// This is intended primarily for verification against expected cookie >+// jar contents. It should produce more readable messages using >+// assert_equals in failing cases than assert_object_equals would >+// using parsed cookie jar contents and also allows expectations to be >+// written more compactly. >+async function getCookieString(...args) { >+ const cookies = await cookieStore.getAll(...args); >+ return cookies.length >+ ? cookies.map(({name, value}) => >+ (name ? (name + '=') : '') + value).join('; ') >+ : undefined; >+} >+ >+// Approximate async equivalent to the document.cookie getter but from >+// the server's point of view. Returns UTF-8 interpretation. Allows >+// sub-path to be specified. >+// >+// Unlike document.cookie, this returns undefined when no cookies are >+// present. >+async function getCookieStringHttp(extraPath = null) { >+ const url = >+ kCookieHelperCgi + ((extraPath == null) ? '' : ('/' + extraPath)); >+ const response = await fetch(url, { credentials: 'include' }); >+ const text = await response.text(); >+ assert_equals( >+ response.ok, >+ true, >+ 'CGI should have succeeded in getCookieStringHttp\n' + text); >+ assert_equals( >+ response.headers.get('content-type'), >+ 'text/plain; charset=utf-8', >+ 'CGI did not return UTF-8 text in getCookieStringHttp'); >+ if (text === '') >+ return undefined; >+ assert_equals( >+ text.indexOf('cookie='), >+ 0, >+ 'CGI response did not begin with "cookie=" and was not empty: ' + text); >+ return decodeURIComponent(text.replace(/^cookie=/, '')); >+} >+ >+// Approximate async equivalent to the document.cookie getter but from >+// the server's point of view. Returns binary string >+// interpretation. Allows sub-path to be specified. >+// >+// Unlike document.cookie, this returns undefined when no cookies are >+// present. >+async function getCookieBinaryHttp(extraPath = null) { >+ const url = >+ kCookieHelperCgi + >+ ((extraPath == null) ? >+ '' : >+ ('/' + extraPath)) + '?charset=iso-8859-1'; >+ const response = await fetch(url, { credentials: 'include' }); >+ const text = await response.text(); >+ assert_equals( >+ response.ok, >+ true, >+ 'CGI should have succeeded in getCookieBinaryHttp\n' + text); >+ assert_equals( >+ response.headers.get('content-type'), >+ 'text/plain; charset=iso-8859-1', >+ 'CGI did not return ISO 8859-1 text in getCookieBinaryHttp'); >+ if (text === '') >+ return undefined; >+ assert_equals( >+ text.indexOf('cookie='), >+ 0, >+ 'CGI response did not begin with "cookie=" and was not empty: ' + text); >+ return unescape(text.replace(/^cookie=/, '')); >+} >+ >+// Approximate async equivalent to the document.cookie setter but from >+// the server's point of view. >+async function setCookieStringHttp(setCookie) { >+ const encodedSetCookie = encodeURIComponent(setCookie); >+ const url = kCookieHelperCgi; >+ const headers = new Headers(); >+ headers.set( >+ 'content-type', >+ 'application/x-www-form-urlencoded; charset=utf-8'); >+ const response = await fetch( >+ url, >+ { >+ credentials: 'include', >+ method: 'POST', >+ headers: headers, >+ body: 'set-cookie=' + encodedSetCookie, >+ }); >+ const text = await response.text(); >+ assert_equals( >+ response.ok, >+ true, >+ 'CGI should have succeeded in setCookieStringHttp set-cookie: ' + >+ setCookie + '\n' + text); >+ assert_equals( >+ response.headers.get('content-type'), >+ 'text/plain; charset=utf-8', >+ 'CGI did not return UTF-8 text in setCookieStringHttp'); >+ assert_equals( >+ text, >+ 'set-cookie=' + encodedSetCookie, >+ 'CGI did not faithfully echo the set-cookie value'); >+} >+ >+// Approximate async equivalent to the document.cookie setter but from >+// the server's point of view. This version sets a binary cookie rather >+// than a UTF-8 one. >+async function setCookieBinaryHttp(setCookie) { >+ const encodedSetCookie = escape(setCookie).split('/').join('%2F'); >+ const url = kCookieHelperCgi + '?charset=iso-8859-1'; >+ const headers = new Headers(); >+ headers.set( >+ 'content-type', >+ 'application/x-www-form-urlencoded; charset=iso-8859-1'); >+ const response = await fetch(url, { >+ credentials: 'include', >+ method: 'POST', >+ headers: headers, >+ body: 'set-cookie=' + encodedSetCookie >+ }); >+ const text = await response.text(); >+ assert_equals( >+ response.ok, >+ true, >+ 'CGI should have succeeded in setCookieBinaryHttp set-cookie: ' + >+ setCookie + '\n' + text); >+ assert_equals( >+ response.headers.get('content-type'), >+ 'text/plain; charset=iso-8859-1', >+ 'CGI did not return Latin-1 text in setCookieBinaryHttp'); >+ assert_equals( >+ text, >+ 'set-cookie=' + encodedSetCookie, >+ 'CGI did not faithfully echo the set-cookie value'); >+} >+ >+// Async document.cookie getter; converts '' to undefined which loses >+// information in the edge case where a single ''-valued anonymous >+// cookie is visible. >+async function getCookieStringDocument() { >+ if (!kHasDocument) >+ throw 'document.cookie not available in this context'; >+ return String(document.cookie || '') || undefined; >+} >+ >+// Async document.cookie setter >+async function setCookieStringDocument(setCookie) { >+ if (!kHasDocument) >+ throw 'document.cookie not available in this context'; >+ document.cookie = setCookie; >+} >+ >+// Observe the next 'change' event on the cookieStore. Typical usage: >+// >+// const eventPromise = observeNextCookieChangeEvent(); >+// await /* something that modifies cookies */ >+// await verifyCookieChangeEvent( >+// eventPromise, {changed: [{name: 'name', value: 'value'}]}); >+// >+function observeNextCookieChangeEvent() { >+ return new Promise(resolve => { >+ cookieStore.addEventListener('change', e => resolve(e), {once: true}); >+ }); >+} >+ >+async function verifyCookieChangeEvent(eventPromise, expected, description) { >+ description = description ? description + ': ' : ''; >+ expected = Object.assign({changed:[], deleted:[]}, expected); >+ const event = await eventPromise; >+ assert_equals(event.changed.length, expected.changed.length, >+ description + 'number of changed cookies'); >+ for (let i = 0; i < event.changed.length; ++i) { >+ assert_equals(event.changed[i].name, expected.changed[i].name, >+ description + 'changed cookie name'); >+ assert_equals(event.changed[i].value, expected.changed[i].value, >+ description + 'changed cookie value'); >+ } >+ assert_equals(event.deleted.length, expected.deleted.length, >+ description + 'number of deleted cookies'); >+ for (let i = 0; i < event.deleted.length; ++i) { >+ assert_equals(event.deleted[i].name, expected.deleted[i].name, >+ description + 'deleted cookie name'); >+ assert_equals(event.deleted[i].value, expected.deleted[i].value, >+ description + 'deleted cookie value'); >+ } >+} >+ >+// Helper function for promise_test with cookies; cookies >+// named in these tests are cleared before/after the test >+// body function is executed. >+async function cookie_test(func, description) { >+ >+ // Wipe cookies used by tests before and after the test. >+ async function deleteAllCookies() { >+ (await cookieStore.getAll()).forEach(({name, value}) => { >+ cookieStore.delete(name); >+ }); >+ } >+ >+ return promise_test(async t => { >+ await deleteAllCookies(); >+ try { >+ return await func(t); >+ } finally { >+ await deleteAllCookies(); >+ } >+ }, description); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie_helper.py b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie_helper.py >new file mode 100644 >index 0000000000000000000000000000000000000000..cf48f26eed1661b8e0f85a4ea8029b2f0b8d2e2d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie_helper.py >@@ -0,0 +1,69 @@ >+#!/usr/bin/env python >+# -*- coding: utf-8 -*- >+ >+# Active wptserve handler for cookie operations. >+# >+# This must support the following requests: >+# >+# - GET with the following query parameters: >+# - charset: (optional) character set for response (default: utf-8) >+# A cookie: request header (if present) is echoed in the body with a >+# cookie= prefix followed by the urlencoded bytes from the header. >+# Used to inspect the cookie jar from an HTTP request header context. >+# - POST with form-data in the body and the following query-or-form parameters: >+# - set-cookie: (optional; repeated) echoed in the set-cookie: response >+# header and also echoed in the body with a set-cookie= prefix >+# followed by the urlencoded bytes from the parameter; multiple occurrences >+# are CRLF-delimited. >+# Used to set cookies from an HTTP response header context. >+# >+# The response has 200 status and content-type: text/plain; charset=<charset> >+import cgi, encodings, os, re, sys, urllib >+ >+# NOTE: These are intentionally very lax to permit testing >+DISALLOWED_IN_COOKIE_NAME_RE = re.compile(r'[;\0-\x1f\x7f]'); >+DISALLOWED_IN_HEADER_RE = re.compile(r'[\0-\x1f\x7f]'); >+ >+# Ensure common charset names do not end up with different >+# capitalization or punctuation >+CHARSET_OVERRIDES = { >+ encodings.codecs.lookup(charset).name: charset >+ for charset in ('utf-8', 'iso-8859-1',) >+} >+ >+def main(request, response): >+ assert request.method in ( >+ 'GET', >+ 'POST', >+ ), 'request method was neither GET nor POST: %r' % request.method >+ qd = (request.url.split('#')[0].split('?', 1) + [''])[1] >+ if request.method == 'POST': >+ qd += '&' + request.body >+ args = cgi.parse_qs(qd, keep_blank_values = True) >+ charset = encodings.codecs.lookup(args.get('charset', ['utf-8'])[-1]).name >+ charset = CHARSET_OVERRIDES.get(charset, charset) >+ headers = [('content-type', 'text/plain; charset=' + charset)] >+ body = [] >+ if request.method == 'POST': >+ for set_cookie in args.get('set-cookie', []): >+ if '=' in set_cookie.split(';', 1)[0]: >+ name, rest = set_cookie.split('=', 1) >+ assert re.search( >+ DISALLOWED_IN_COOKIE_NAME_RE, >+ name >+ ) is None, 'name had disallowed characters: %r' % name >+ else: >+ rest = set_cookie >+ assert re.search( >+ DISALLOWED_IN_HEADER_RE, >+ rest >+ ) is None, 'rest had disallowed characters: %r' % rest >+ headers.append(('set-cookie', set_cookie)) >+ body.append('set-cookie=' + urllib.quote(set_cookie, '')) >+ else: >+ cookie = request.headers.get('cookie') >+ if cookie is not None: >+ body.append('cookie=' + urllib.quote(cookie, '')) >+ body = '\r\n'.join(body) >+ headers.append(('content-length', str(len(body)))) >+ return 200, headers, body >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/document_cookie.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/document_cookie.js >new file mode 100644 >index 0000000000000000000000000000000000000000..980347f1d185649ad4366f4d86fb03c030baa03f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/document_cookie.js >@@ -0,0 +1,157 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringDocument('DOCUMENT-cookie=value; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using document.cookie in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using document.cookie in HTTP cookie jar'); >+ assert_equals( >+ await getCookieStringDocument(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using document.cookie in document.cookie'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'value'}]}, >+ 'Cookie we wrote using document.cookie is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringDocument('DOCUMENT-cookie=new-value; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using document.cookie in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using document.cookie in HTTP cookie jar'); >+ assert_equals( >+ await getCookieStringDocument(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using document.cookie in document.cookie'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'new-value'}]}, >+ 'Cookie we overwrote using document.cookie is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringDocument('DOCUMENT-cookie=DELETED; path=/; max-age=0'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after document.cookie' + >+ ' cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after document.cookie' + >+ ' cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieStringDocument(), >+ undefined, >+ 'Empty document.cookie cookie jar after document.cookie' + >+ ' cookie-clearing using max-age=0'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'DOCUMENT-cookie'}]}, >+ 'Deletion observed after document.cookie cookie-clearing' + >+ ' using max-age=0'); >+}, 'document.cookie set/overwrite/delete observed by CookieStore'); >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('DOCUMENT-cookie', 'value'); >+ assert_equals( >+ await getCookieString(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using CookieStore in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using CookieStore in HTTP cookie jar'); >+ assert_equals( >+ await getCookieStringDocument(), >+ 'DOCUMENT-cookie=value', >+ 'Cookie we wrote using CookieStore in document.cookie'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'value'}]}, >+ 'Cookie we wrote using CookieStore is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('DOCUMENT-cookie', 'new-value'); >+ assert_equals( >+ await getCookieString(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using CookieStore in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using CookieStore in HTTP cookie jar'); >+ assert_equals( >+ await getCookieStringDocument(), >+ 'DOCUMENT-cookie=new-value', >+ 'Cookie we overwrote using CookieStore in document.cookie'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'new-value'}]}, >+ 'Cookie we overwrote using CookieStore is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.delete('DOCUMENT-cookie'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after CookieStore delete'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after CookieStore delete'); >+ assert_equals( >+ await getCookieStringDocument(), >+ undefined, >+ 'Empty document.cookie cookie jar after CookieStore delete'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'DOCUMENT-cookie'}]}, >+ 'Deletion observed after CookieStore delete'); >+}, 'CookieStore set/overwrite/delete observed by document.cookie'); >+ >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringDocument('DOCUMENT-ðª=ðµ; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'DOCUMENT-ðª=ðµ', >+ 'Cookie we wrote using document.cookie in cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'DOCUMENT-ðª', value: 'ðµ'}]}, >+ 'Cookie we wrote using document.cookie is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringDocument('DOCUMENT-ðª=DELETED; path=/; max-age=0'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after document.cookie' + >+ ' cookie-clearing using max-age=0'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'DOCUMENT-ðª'}]}, >+ 'Deletion observed after document.cookie cookie-clearing' + >+ ' using max-age=0'); >+}, 'CookieStore agrees with document.cookie on encoding non-ASCII cookies'); >+ >+ >+cookie_test(async t => { >+ await cookieStore.set('DOCUMENT-ðª', 'ðµ'); >+ assert_equals( >+ await getCookieStringDocument(), >+ 'DOCUMENT-ðª=ðµ', >+ 'Cookie we wrote using CookieStore in document.cookie'); >+ >+ await cookieStore.delete('DOCUMENT-ðª'); >+ assert_equals( >+ await getCookieStringDocument(), >+ undefined, >+ 'Empty cookie jar after CookieStore delete'); >+}, 'document.cookie agrees with CookieStore on encoding non-ASCII cookies'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/http_cookie_and_set_cookie_headers.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/http_cookie_and_set_cookie_headers.js >new file mode 100644 >index 0000000000000000000000000000000000000000..0fcf6b604290ddbdb165502e9fc514e20990b47b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/http_cookie_and_set_cookie_headers.js >@@ -0,0 +1,203 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTP-cookie=value; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'HTTP-cookie=value', >+ 'Cookie we wrote using HTTP in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTP-cookie=value', >+ 'Cookie we wrote using HTTP in HTTP cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'HTTP-cookie', value: 'value'}]}, >+ 'Cookie we wrote using HTTP is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTP-cookie=new-value; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'HTTP-cookie=new-value', >+ 'Cookie we overwrote using HTTP in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTP-cookie=new-value', >+ 'Cookie we overwrote using HTTP in HTTP cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'HTTP-cookie', value: 'new-value'}]}, >+ 'Cookie we overwrote using HTTP is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTP-cookie=DELETED; path=/; max-age=0'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after HTTP cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after HTTP cookie-clearing using max-age=0'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'HTTP-cookie'}]}, >+ 'Deletion observed after HTTP cookie-clearing using max-age=0'); >+}, 'HTTP set/overwrite/delete observed in CookieStore'); >+ >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTP-ðª=ðµ; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'HTTP-ðª=ðµ', >+ 'Cookie we wrote using HTTP in cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'HTTP-ðª', value: 'ðµ'}]}, >+ 'Cookie we wrote using HTTP is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieStringHttp('HTTP-ðª=DELETED; path=/; max-age=0'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after HTTP cookie-clearing using max-age=0'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'HTTP-ðª'}]}, >+ 'Deletion observed after HTTP cookie-clearing using max-age=0'); >+ >+}, 'CookieStore agreed with HTTP headers agree on encoding non-ASCII cookies'); >+ >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('TEST', 'value0'); >+ assert_equals( >+ await getCookieString(), >+ 'TEST=value0', >+ 'Cookie jar contains only cookie we set'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'TEST=value0', >+ 'HTTP cookie jar contains only cookie we set'); >+ await verifyCookieChangeEvent( >+ eventPromise, >+ {changed: [{name: 'TEST', value: 'value0'}]}, >+ 'Observed value that was set'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('TEST', 'value'); >+ assert_equals( >+ await getCookieString(), >+ 'TEST=value', >+ 'Cookie jar contains only cookie we set'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'TEST=value', >+ 'HTTP cookie jar contains only cookie we set'); >+ await verifyCookieChangeEvent( >+ eventPromise, >+ {changed: [{name: 'TEST', value: 'value'}]}, >+ 'Observed value that was overwritten'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.delete('TEST'); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Cookie jar does not contain cookie we deleted'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'HTTP cookie jar does not contain cookie we deleted'); >+ await verifyCookieChangeEvent( >+ eventPromise, >+ {deleted: [{name: 'TEST'}]}, >+ 'Observed cookie that was deleted'); >+}, 'CookieStore set/overwrite/delete observed in HTTP headers'); >+ >+ >+cookie_test(async t => { >+ await cookieStore.set('ðª', 'ðµ'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'ðª=ðµ', >+ 'HTTP cookie jar contains only cookie we set'); >+ >+ await cookieStore.delete('ðª'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'HTTP cookie jar does not contain cookie we deleted'); >+}, 'HTTP headers agreed with CookieStore on encoding non-ASCII cookies'); >+ >+ >+cookie_test(async t => { >+ // Non-UTF-8 byte sequences cause the Set-Cookie to be dropped. >+ let eventPromise = observeNextCookieChangeEvent(); >+ await setCookieBinaryHttp( >+ unescape(encodeURIComponent('HTTP-cookie=value')) + '\xef\xbf\xbd; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'HTTP-cookie=value\ufffd', >+ 'Binary cookie we wrote using HTTP in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTP-cookie=value\ufffd', >+ 'Binary cookie we wrote using HTTP in HTTP cookie jar'); >+ assert_equals( >+ decodeURIComponent(escape(await getCookieBinaryHttp())), >+ 'HTTP-cookie=value\ufffd', >+ 'Binary cookie we wrote in binary HTTP cookie jar'); >+ assert_equals( >+ await getCookieBinaryHttp(), >+ unescape(encodeURIComponent('HTTP-cookie=value')) + '\xef\xbf\xbd', >+ 'Binary cookie we wrote in binary HTTP cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'HTTP-cookie', value: 'value\ufffd'}]}, >+ 'Binary cookie we wrote using HTTP is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieBinaryHttp( >+ unescape(encodeURIComponent('HTTP-cookie=new-value')) + '\xef\xbf\xbd; path=/'); >+ assert_equals( >+ await getCookieString(), >+ 'HTTP-cookie=new-value\ufffd', >+ 'Binary cookie we overwrote using HTTP in cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ 'HTTP-cookie=new-value\ufffd', >+ 'Binary cookie we overwrote using HTTP in HTTP cookie jar'); >+ assert_equals( >+ decodeURIComponent(escape(await getCookieBinaryHttp())), >+ 'HTTP-cookie=new-value\ufffd', >+ 'Binary cookie we overwrote in binary HTTP cookie jar'); >+ assert_equals( >+ await getCookieBinaryHttp(), >+ unescape(encodeURIComponent('HTTP-cookie=new-value')) + '\xef\xbf\xbd', >+ 'Binary cookie we overwrote in binary HTTP cookie jar'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: 'HTTP-cookie', value: 'new-value\ufffd'}]}, >+ 'Binary cookie we overwrote using HTTP is observed'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await setCookieBinaryHttp( >+ unescape(encodeURIComponent('HTTP-cookie=DELETED; path=/; max-age=0'))); >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after binary HTTP cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after' + >+ ' binary HTTP cookie-clearing using max-age=0'); >+ assert_equals( >+ await getCookieBinaryHttp(), >+ undefined, >+ 'Empty binary HTTP cookie jar after' + >+ ' binary HTTP cookie-clearing using max-age=0'); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: 'HTTP-cookie'}]}, >+ 'Deletion observed after binary HTTP cookie-clearing using max-age=0'); >+}, 'Binary HTTP set/overwrite/delete observed in CookieStore'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_and_no_value.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_and_no_value.js >new file mode 100644 >index 0000000000000000000000000000000000000000..e0c11a6cb65b5b9368d44eeee90da587c222b298 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_and_no_value.js >@@ -0,0 +1,45 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('', 'first-value'); >+ const actual1 = >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'); >+ const expected1 = 'first-value'; >+ assert_equals(actual1, expected1); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: '', value: 'first-value'}]}, >+ 'Observed no-name change'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('', ''); >+ const actual2 = >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'); >+ const expected2 = ''; >+ assert_equals(actual2, expected2); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: '', value: ''}]}, >+ 'Observed no-name change'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.delete(''); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: ''}]}, >+ 'Observed no-name deletion'); >+ >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar'); >+ if (kHasDocument) { >+ assert_equals( >+ await getCookieStringDocument(), >+ undefined, >+ 'Empty document.cookie cookie jar'); >+ } >+ >+}, 'Verify behavior of no-name and no-value cookies.'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_equals_in_value.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_equals_in_value.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b6cfab5256214a58526ee1a2fe8a950846ef5a86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_equals_in_value.js >@@ -0,0 +1,41 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('', 'first-value'); >+ assert_equals( >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'), >+ 'first-value', >+ 'Cookie with no name and normal value should have been set'); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: '', value: 'first-value'}]}, >+ 'Observed no-name change'); >+ >+ await promise_rejects( >+ t, >+ new TypeError(), >+ cookieStore.set('', 'suspicious-value=resembles-name-and-value'), >+ 'Expected promise rejection when setting a cookie with' + >+ ' no name and "=" in value (via arguments)'); >+ >+ await promise_rejects( >+ t, >+ new TypeError(), >+ cookieStore.set( >+ {name: '', value: 'suspicious-value=resembles-name-and-value'}), >+ 'Expected promise rejection when setting a cookie with' + >+ ' no name and "=" in value (via options)'); >+ >+ assert_equals( >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'), >+ 'first-value', >+ 'Cookie with no name should still have previous value'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.delete(''); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: ''}]}, >+ 'Observed no-name deletion'); >+ >+}, "Verify that attempting to set a cookie with no name and with '=' in" + >+ " the value does not work."); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_multiple_values.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_multiple_values.js >new file mode 100644 >index 0000000000000000000000000000000000000000..51ea5281c2ce1be04d616fa282100bb96d43a75c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_multiple_values.js >@@ -0,0 +1,38 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ let eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('', 'first-value'); >+ let actual1 = >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'); >+ let expected1 = 'first-value'; >+ assert_equals(actual1, expected1); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: '', value: 'first-value'}]}, >+ 'Observed no-name change'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.set('', 'second-value'); >+ let actual2 = >+ (await cookieStore.getAll('')).map(({ value }) => value).join(';'); >+ let expected2 = 'second-value'; >+ assert_equals(actual2, expected2); >+ await verifyCookieChangeEvent( >+ eventPromise, {changed: [{name: '', value: 'second-value'}]}, >+ 'Observed no-name change'); >+ >+ eventPromise = observeNextCookieChangeEvent(); >+ await cookieStore.delete(''); >+ await verifyCookieChangeEvent( >+ eventPromise, {deleted: [{name: ''}]}, >+ 'Observed no-name change'); >+ >+ assert_equals( >+ await getCookieString(), >+ undefined, >+ 'Empty cookie jar after testNoNameMultipleValues'); >+ assert_equals( >+ await getCookieStringHttp(), >+ undefined, >+ 'Empty HTTP cookie jar after testNoNameMultipleValues'); >+}, 'Verify behavior of multiple no-name cookies'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/ordering.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/ordering.js >new file mode 100644 >index 0000000000000000000000000000000000000000..86babd95edbcfcfd75b120cda5936d24679be188 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/ordering.js >@@ -0,0 +1,39 @@ >+'use strict'; >+ >+cookie_test(async t => { >+ await cookieStore.set('ordered-1', 'cookie-value1'); >+ await cookieStore.set('ordered-2', 'cookie-value2'); >+ await cookieStore.set('ordered-3', 'cookie-value3'); >+ // NOTE: this assumes no concurrent writes from elsewhere; it also >+ // uses three separate cookie jar read operations where a single getAll >+ // would be more efficient, but this way the CookieStore does the filtering >+ // for us. >+ const matchingValues = await Promise.all(['1', '2', '3'].map( >+ async suffix => (await cookieStore.get('ordered-' + suffix)).value)); >+ const actual = matchingValues.join(';'); >+ const expected = 'cookie-value1;cookie-value2;cookie-value3'; >+ assert_equals(actual, expected); >+}, 'Set three simple origin session cookies sequentially and ensure ' + >+ 'they all end up in the cookie jar in order.'); >+ >+cookie_test(async t => { >+ await Promise.all([ >+ cookieStore.set('ordered-unordered1', 'unordered-cookie-value1'), >+ cookieStore.set('ordered-unordered2', 'unordered-cookie-value2'), >+ cookieStore.set('ordered-unordered3', 'unordered-cookie-value3') >+ ]); >+ // NOTE: this assumes no concurrent writes from elsewhere; it also >+ // uses three separate cookie jar read operations where a single getAll >+ // would be more efficient, but this way the CookieStore does the filtering >+ // for us and we do not need to sort. >+ const matchingCookies = await Promise.all(['1', '2', '3'].map( >+ suffix => cookieStore.get('ordered-unordered' + suffix))); >+ const actual = matchingCookies.map(({ value }) => value).join(';'); >+ const expected = >+ 'unordered-cookie-value1;' + >+ 'unordered-cookie-value2;' + >+ 'unordered-cookie-value3'; >+ assert_equals(actual, expected); >+}, 'Set three simple origin session cookies in undefined order using ' + >+ 'Promise.all and ensure they all end up in the cookie jar in any ' + >+ 'order. '); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..60ffd7b2bd2bd4e1194864d0e1073d7106767de0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/w3c-import.log >@@ -0,0 +1,24 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie-test-helpers.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/cookie_helper.py >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/document_cookie.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/http_cookie_and_set_cookie_headers.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_and_no_value.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_equals_in_value.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/no_name_multiple_values.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/resources/ordering.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js >new file mode 100644 >index 0000000000000000000000000000000000000000..0ffe6f8b0b0108f7e3ff9db57360e2f6bc1d51b5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js >@@ -0,0 +1,14 @@ >+self.GLOBAL = { >+ isWindow: function() { return false; }, >+ isWorker: function() { return true; }, >+}; >+importScripts("/resources/testharness.js"); >+ >+importScripts( >+ "cookieStore_delete_arguments.tentative.window.js", >+ "cookieStore_get_arguments.tentative.window.js", >+ "cookieStore_getAll_arguments.tentative.window.js", >+ "cookieStore_has_arguments.tentative.window.js", >+ "cookieStore_set_arguments.tentative.window.js"); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ed1f0e9fa553b9375258165597fe4578613ff34a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https-expected.txt >@@ -0,0 +1,49 @@ >+ >+FAIL cookieStore.delete with positional name promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with name in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with value in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with expires in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with domain set to the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with domain set to a subdomain of the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with name in options and domain set to the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with name in options and domain set to a subdomain of the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with path set to the current directory promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.delete with path set to subdirectory of the current directory promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with positional name promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with name in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with matchType explicitly set to equals promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with matchType set to startsWith promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with invalid matchType promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get with matchType set to startsWith and name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with no arguments promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with positional name promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with name in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with matchType explicitly set to equals promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with matchType set to startsWith promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with invalid matchType promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll with matchType set to startsWith and name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with positional name promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with name in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with matchType explicitly set to equals promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with matchType set to startsWith promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with invalid matchType promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has with matchType set to startsWith and name in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with positional name and value promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with name and value in options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with name in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with value in both positional arguments and options promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with expires in the future promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with expires in the past promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with name and value in options and expires in the future promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with name and value in options and expires in the past promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with domain set to the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with domain set to a subdomain of the current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set default domain is current hostname promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with path set to the current directory promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set with path set to a subdirectory of the current directory promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.set default path is / promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..06c950149751ab6e264c3bd12c826d8a60b9baf6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: cookieStore API argument handling in ServiceWorker</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+(async () => { >+ const scope = 'does/not/exist'; >+ >+ let registration = await navigator.serviceWorker.getRegistration(scope); >+ if (registration) >+ await registration.unregister(); >+ registration = await navigator.serviceWorker.register( >+ 'serviceworker_cookieStore_arguments.js', {scope}); >+ >+ fetch_tests_from_worker(registration.installing); >+})(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js >new file mode 100644 >index 0000000000000000000000000000000000000000..0d8039f9d33972cb9eadfdb3ce02bec817bcbcec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js >@@ -0,0 +1,13 @@ >+self.GLOBAL = { >+ isWindow: function() { return false; }, >+ isWorker: function() { return true; }, >+}; >+importScripts("/resources/testharness.js"); >+ >+importScripts( >+ "cookieStore_get_delete_basic.tentative.window.js", >+ "cookieStore_get_set_basic.tentative.window.js", >+ "cookieStore_getAll_set_basic.tentative.window.js", >+ "cookieStore_has_basic.tentative.window.js"); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e891ec2bf4ce4496cf09737fa2840bdc371b1caa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL cookieStore.get returns null for a cookie deleted by cookieStore.delete promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.get returns the cookie written by cookieStore.set promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.getAll returns the cookie written by cookieStore.set promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has returns true for cookie set by cookieStore.set() promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+FAIL cookieStore.has returns false for cookie deleted by cookieStore.delete() promise_test: Unhandled rejection with value: object "ReferenceError: Can't find variable: cookieStore" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d4385d64ea993a7ecd8e92da4b722b7951134c30 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: cookieStore basic API in ServiceWorker</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+(async () => { >+ const scope = 'does/not/exist'; >+ >+ let registration = await navigator.serviceWorker.getRegistration(scope); >+ if (registration) >+ await registration.unregister(); >+ registration = await navigator.serviceWorker.register( >+ 'serviceworker_cookieStore_basic.js', {scope}); >+ >+ fetch_tests_from_worker(registration.installing); >+})(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js >new file mode 100644 >index 0000000000000000000000000000000000000000..a2affed5eac83925a53e0e88fd874a9b65eb14d9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js >@@ -0,0 +1,113 @@ >+self.GLOBAL = { >+ isWindow: function() { return false; }, >+ isWorker: function() { return true; }, >+}; >+importScripts("/resources/testharness.js"); >+ >+self.addEventListener('install', (event) => { >+ event.waitUntil((async () => { >+ // The subscribeToChanges calls are not done in parallel on purpose. Having >+ // multiple in-flight requests introduces failure modes aside from the >+ // cookie change logic that this test aims to cover. >+ await cookieStore.subscribeToChanges([ >+ { name: 'cookie-name1', matchType: 'equals', url: '/scope/path1' }]); >+ await cookieStore.subscribeToChanges([ >+ { }, // Test the default values for subscription properties. >+ { name: 'cookie-prefix', matchType: 'startsWith' }, >+ ]); >+ })()); >+}); >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+// Resolves when the service worker receives the 'activate' event. >+const kServiceWorkerActivatedPromise = new Promise(resolve => { >+ self.addEventListener('activate', event => { resolve(); }); >+}); >+ >+// sort() comparator that uses the < operator. >+// >+// This is intended to be used for sorting strings. Using < is preferred to >+// localeCompare() because the latter has some implementation-dependent >+// behavior. >+function CompareStrings(a, b) { >+ return a < b ? -1 : (b < a ? 1 : 0); >+} >+ >+promise_test(async testCase => { >+ await kServiceWorkerActivatedPromise; >+ >+ const subscriptions = await cookieStore.getChangeSubscriptions(); >+ assert_equals(subscriptions.length, 3); >+ >+ subscriptions.sort((a, b) => CompareStrings(`${a.name}`, `${b.name}`)); >+ >+ assert_equals(subscriptions[0].name, 'cookie-name1'); >+ assert_equals('equals', subscriptions[0].matchType); >+ >+ assert_equals(subscriptions[1].name, 'cookie-prefix'); >+ assert_equals('startsWith', subscriptions[1].matchType); >+ >+ assert_false('name' in subscriptions[2]); >+ assert_equals('startsWith', subscriptions[2].matchType); >+}, 'getChangeSubscriptions returns subscriptions passed to subscribeToChanges'); >+ >+promise_test(async testCase => { >+ promise_rejects( >+ testCase, new TypeError(), >+ cookieStore.subscribeToChanges([{ name: 'cookie-name2' }])); >+}, 'subscribeToChanges rejects when called outside the install handler'); >+ >+ >+// Accumulates cookiechange events dispatched to the service worker. >+let g_cookie_changes = []; >+ >+// Resolved when a cookiechange event is received. Rearmed by >+// ResetCookieChangeReceivedPromise(). >+let g_cookie_change_received_promise = null; >+let g_cookie_change_received_promise_resolver = null; >+self.addEventListener('cookiechange', (event) => { >+ g_cookie_changes.push(event); >+ if (g_cookie_change_received_promise_resolver) >+ g_cookie_change_received_promise_resolver(); >+}); >+function RearmCookieChangeReceivedPromise() { >+ g_cookie_change_received_promise = new Promise((resolve) => { >+ g_cookie_change_received_promise_resolver = resolve; >+ }); >+} >+RearmCookieChangeReceivedPromise(); >+ >+promise_test(async testCase => { >+ await kServiceWorkerActivatedPromise; >+ >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ await g_cookie_change_received_promise; >+ >+ assert_equals(g_cookie_changes.length, 1); >+ const event = g_cookie_changes[0] >+ assert_equals(event.type, 'cookiechange'); >+ assert_equals(event.changed.length, 1); >+ assert_equals(event.changed[0].name, 'cookie-name'); >+ assert_equals(event.changed[0].value, 'cookie-value'); >+ assert_equals(event.deleted.length, 0); >+ assert_true(event instanceof ExtendableCookieChangeEvent); >+ assert_true(event instanceof ExtendableEvent); >+ >+ await async_cleanup(() => { >+ cookieStore.delete('cookie-name'); >+ g_cookie_changes = []; >+ RearmCookieChangeReceivedPromise(); >+ }); >+}, 'cookiechange dispatched with cookie change that matches subscription'); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fcd0adb7bee6426ec6bbe2bc509e3e033dfb67e0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https-expected.txt >@@ -0,0 +1,7 @@ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT getChangeSubscriptions returns subscriptions passed to subscribeToChanges Test timed out >+NOTRUN subscribeToChanges rejects when called outside the install handler >+NOTRUN cookiechange dispatched with cookie change that matches subscription >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..723de2312fe63e158e17a217c355a99838238660 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: cookie change events in ServiceWorker</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+(async () => { >+ const scope = 'scope'; >+ >+ let registration = await navigator.serviceWorker.getRegistration(scope); >+ if (registration) >+ await registration.unregister(); >+ registration = await navigator.serviceWorker.register( >+ 'serviceworker_cookieStore_subscriptions.js', {scope}); >+ >+ fetch_tests_from_worker(registration.installing); >+})(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2b602f4c5f0791bebb3fd58b8c6af1b9fb443506 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js >@@ -0,0 +1,63 @@ >+self.GLOBAL = { >+ isWindow: function() { return false; }, >+ isWorker: function() { return true; }, >+}; >+importScripts("/resources/testharness.js"); >+ >+self.addEventListener('install', (event) => { >+ event.waitUntil((async () => { >+ cookieStore.subscribeToChanges([ >+ { name: 'cookie-name', matchType: 'equals', url: '/scope/path' }]); >+ })()); >+}); >+ >+// Workaround because add_cleanup doesn't support async functions yet. >+// See https://github.com/web-platform-tests/wpt/issues/6075 >+async function async_cleanup(cleanup_function) { >+ try { >+ await cleanup_function(); >+ } catch (e) { >+ // Errors in cleanup functions shouldn't result in test failures. >+ } >+} >+ >+// Resolves when the service worker receives the 'activate' event. >+const kServiceWorkerActivatedPromise = new Promise(resolve => { >+ self.addEventListener('activate', event => { resolve(); }); >+}); >+ >+promise_test(async testCase => { >+ await kServiceWorkerActivatedPromise; >+ >+ const subscriptions = await cookieStore.getChangeSubscriptions(); >+ assert_equals(subscriptions.length, 1); >+ >+ assert_equals(subscriptions[0].name, 'cookie-name'); >+ assert_equals('equals', subscriptions[0].matchType); >+}, 'getChangeSubscriptions returns a subscription passed to subscribeToChanges'); >+ >+ >+promise_test(async testCase => { >+ await kServiceWorkerActivatedPromise; >+ >+ cookie_change_received_promise = new Promise((resolve) => { >+ self.addEventListener('cookiechange', (event) => { >+ resolve(event); >+ }); >+ }); >+ >+ await cookieStore.set('cookie-name', 'cookie-value'); >+ >+ const event = await cookie_change_received_promise; >+ assert_equals(event.type, 'cookiechange'); >+ assert_equals(event.changed.length, 1); >+ assert_equals(event.changed[0].name, 'cookie-name'); >+ assert_equals(event.changed[0].value, 'cookie-value'); >+ assert_equals(event.deleted.length, 0); >+ assert_true(event instanceof ExtendableCookieChangeEvent); >+ assert_true(event instanceof ExtendableEvent); >+ >+ await async_cleanup(() => { cookieStore.delete('cookie-name'); }); >+}, 'cookiechange dispatched with cookie change that matches subscription'); >+ >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4c45594a537c65021ed81ae0d6909f2d28baebd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https-expected.txt >@@ -0,0 +1,6 @@ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT getChangeSubscriptions returns a subscription passed to subscribeToChanges Test timed out >+NOTRUN cookiechange dispatched with cookie change that matches subscription >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..525c3b3c5c15007b282008eff8cd541e193764b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Async Cookies: cookie change events in ServiceWorker</title> >+<link rel="help" href="https://github.com/WICG/cookie-store"> >+<link rel="author" href="pwnall@chromium.org" title="Victor Costan"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+'use strict'; >+ >+(async () => { >+ const scope = 'scope'; >+ >+ let registration = await navigator.serviceWorker.getRegistration(scope); >+ if (registration) >+ await registration.unregister(); >+ registration = await navigator.serviceWorker.register( >+ 'serviceworker_cookieStore_subscriptions_basic.js', {scope}); >+ >+ fetch_tests_from_worker(registration.installing); >+})(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cookie-store/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..e106b0c2a8bb0138aed2a6284058ff1c754fd304 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cookie-store/w3c-import.log >@@ -0,0 +1,60 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/README.md >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_arguments.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_delete_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_arguments.tenative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_delete.tenative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_event_overwrite.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_arguments.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_getAll_set_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_arguments.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_delete_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_get_set_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_arguments.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_has_basic.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_in_detached_frame.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_arguments.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_set_expires_option.tentative.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/cookieStore_special_names.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_cookie.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/document_getAll_multiple.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/httponly_cookies.window.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/idlharness_serviceworker.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_and_no_value.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_equals_in_value.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/no_name_multiple_values.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/ordering.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_arguments.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_basic.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.js >+/LayoutTests/imported/w3c/web-platform-tests/cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/README.md b/LayoutTests/imported/w3c/web-platform-tests/cors/README.md >index b239462625f667daf68fefb27185fddfbc57a5bd..aa5ff90d486e8bc15134b797be7b40928466e133 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/README.md >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/README.md >@@ -5,4 +5,4 @@ These tests are located here as originally the CORS protocol was defined on its > More CORS tests can be found in > > * /fetch >-* /XMLHttpRequest >+* /xhr >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a36e0ab9055463ff05375eb1f2fdb65877dad250 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers-expected.txt >@@ -0,0 +1,16 @@ >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print, >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print >+Blocked access to external URL http://www1.localhost:8800/cors/resources/cors-makeheader.py?headers=x-print >+Request headers >+ >+ >+FAIL Client hint headers are simple headers A network error occurred. >+PASS Unspecified request headers are disallowed >+PASS Unextractable device-memory client hint header is disallowed >+PASS Unextractable DPR client hint header is disallowed >+PASS Unextractable width client hint header is disallowed >+PASS Unextractable viewport-width client hint header is disallowed >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers.htm b/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..ee6c7ea7e86f032e3da96e99747c743a16ba44e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers.htm >@@ -0,0 +1,77 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>CORS - client hint request headers - Access-Control-Allow-Headers</title> >+ >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=support.js?pipe=sub></script> >+ >+<h1>Request headers</h1> >+<div id=log></div> >+<script> >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print,', false) >+ client.setRequestHeader('x-print', 'unicorn') >+ client.setRequestHeader('content-type', 'text/plain') >+ client.setRequestHeader('accept', 'test') >+ client.setRequestHeader('accept-language', 'nn') >+ client.setRequestHeader('content-language', 'nn') >+ client.setRequestHeader('save-data', 'on') >+ client.setRequestHeader('device-memory', '1.0') >+ client.setRequestHeader('dpr', '2.0') >+ client.setRequestHeader('width', '35') >+ client.setRequestHeader('viewport-width', '42') >+ client.send(null) >+ >+ const res = JSON.parse(client.response) >+ assert_equals(res['x-print'], 'unicorn') >+ assert_equals(res['content-type'], 'text/plain') >+ assert_equals(res['accept'], 'test') >+ assert_equals(res['accept-language'], 'nn') >+ assert_equals(res['content-language'], 'nn') >+ assert_equals(res['save-data'], 'on') >+ assert_equals(res['device-memory'], '1.0') >+ assert_equals(res['dpr'], '2.0') >+ assert_equals(res['width'], '35') >+ assert_equals(res['viewport-width'], '42') >+}, 'Client hint headers are simple headers') >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) >+ client.setRequestHeader('x-print', 'unicorn') >+ client.setRequestHeader('y-print', 'unicorn') >+ assert_throws("NetworkError", function() { client.send(null) }) >+}, 'Unspecified request headers are disallowed') >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) >+ client.setRequestHeader('device-memory', '') >+ assert_throws("NetworkError", function() { client.send(null) }) >+}, 'Unextractable device-memory client hint header is disallowed') >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) >+ client.setRequestHeader('dpr', '') >+ assert_throws("NetworkError", function() { client.send(null) }) >+}, 'Unextractable DPR client hint header is disallowed') >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) >+ client.setRequestHeader('width', '') >+ assert_throws("NetworkError", function() { client.send(null) }) >+}, 'Unextractable width client hint header is disallowed') >+ >+test(function() { >+ var client = new XMLHttpRequest() >+ client.open('GET', CROSSDOMAIN + 'resources/cors-makeheader.py?headers=x-print', false) >+ client.setRequestHeader('viewport-width', '') >+ assert_throws("NetworkError", function() { client.send(null) }) >+}, 'Unextractable viewport-width client hint header is disallowed') >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..58ccb73788cfe1105a60fae1294d0f4a8a1929ea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub-expected.txt >@@ -0,0 +1,6 @@ >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT An image resource that is same-origin to the top-level frame loaded in the frame is not treated as same-origin for an iframe that is cross-origin to the top-level frame, and therefore a canvas where the image is drawn gets tainted. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub.html b/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0cd87756e944321264d105e26c4c72e23fa7f5c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body> >+</body> >+<script> >+async_test(t => { >+ const img = document.createElement('img'); >+ img.onload = t.step_func(() => { >+ const iframe = document.createElement('iframe'); >+ window.onmessage = t.step_func_done(e => { >+ assert_equals(e.data, 'DONE'); >+ }); >+ iframe.src = 'http://{{domains[www1]}}:{{ports[http][0]}}/cors/resources/image-tainting-checker.sub.html'; >+ document.body.appendChild(iframe); >+ }); >+ img.src = '/images/blue-png-cachable.py'; >+ document.body.appendChild(img); >+}, 'An image resource that is same-origin to the top-level frame loaded in ' + >+ 'the frame is not treated as same-origin for an iframe that is ' + >+ 'cross-origin to the top-level frame, and therefore a canvas where the ' + >+ 'image is drawn gets tainted.'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/late-upload-events-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/cors/late-upload-events-expected.txt >index 53a459396bced652d4f84a359026bd3dc532ac4d..8f9a1e0f52a1775b6fe98607d5c09f9caeb29625 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/late-upload-events-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/late-upload-events-expected.txt >@@ -1,7 +1,6 @@ > Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header > CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >-Blocked access to external URL http://www1.localhost:8800/cors/resources/status.py?headers=custom-header >-CONSOLE MESSAGE: line 30: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load http://www1.localhost:8800/cors/resources/status.py?headers=custom-header due to access control checks. > Adding upload event listeners after send() > > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-cookie.py b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-cookie.py >index 76fa6c165ba64e99a5cf7580e802ccb0befee261..061563e4f2078c44f9aad3a3e8d87b453b1af1fb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-cookie.py >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-cookie.py >@@ -15,7 +15,7 @@ def main(request, response): > body = request.cookies[ident].value > response.delete_cookie(ident) > else: >- response.set_cookie(ident, "COOKIE"); >+ response.set_cookie(ident, "COOKIE") > body = "NO_COOKIE" > > return headers, body >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/image-tainting-checker.sub.html b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/image-tainting-checker.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..59de9e7a23ce6ef949d03db610609c61ce4d98c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/image-tainting-checker.sub.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<body> >+<canvas id="canvas"></canvas> >+<script> >+// Used by image-tainting-in-cross-origin-iframe.sub.html to check that an >+// image resource loaded by the top level frame that is same-origin to the >+// frame isn't treated as a same-origin resource in a cross-origin iframe. >+const canvas = document.getElementById('canvas'); >+const ctx = canvas.getContext('2d'); >+const img = new Image(); >+img.src = 'http://{{host}}:{{ports[http][0]}}/images/blue-png-cachable.py'; >+img.onload = () => { >+ ctx.drawImage(img, 0, 0); >+ try { >+ ctx.getImageData(0, 0, 1, 1); >+ parent.postMessage('FAIL: getImageData() didn\'t throw', '*'); >+ } catch (e) { >+ parent.postMessage('DONE', '*'); >+ } >+}; >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/status.py b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/status.py >index 8d441f06e7cbbef38062485eeff19f7016070456..96950dae4fd39375ca682bd3740fbaf6e691922a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/status.py >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/status.py >@@ -1,5 +1,5 @@ > def main(request, response): >- response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin") ) >+ response.headers.set("Access-Control-Allow-Origin", request.headers.get("origin")) > response.headers.set("Access-Control-Expose-Headers", "X-Request-Method") > > if request.method == 'OPTIONS': >@@ -10,7 +10,7 @@ def main(request, response): > > response.headers.set("X-Request-Method", request.method) > >- response.headers.set("X-A-C-Request-Method", request.headers.get("Access-Control-Request-Method", "")); >+ response.headers.set("X-A-C-Request-Method", request.headers.get("Access-Control-Request-Method", "")) > > > #This should reasonably work for most response codes. >@@ -24,7 +24,7 @@ def main(request, response): > if request.method == "OPTIONS" and "preflight" in request.GET: > try: > code = int(request.GET.first('preflight')) >- except KeyError, ValueError: >+ except KeyError: > pass > > status = code, text >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/w3c-import.log >index b78b856d49bd2c5ddc8493e178571cc6a0dd5ebc..f395c930c298fb1f8383615ffbe87f07abf2d47d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/resources/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/resources/w3c-import.log >@@ -21,6 +21,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-cookie.py > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-headers.asis > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/cors-makeheader.py >+/LayoutTests/imported/w3c/web-platform-tests/cors/resources/image-tainting-checker.sub.html > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/preflight.py > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/remote-xhrer.html > /LayoutTests/imported/w3c/web-platform-tests/cors/resources/status.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/simple-requests.htm b/LayoutTests/imported/w3c/web-platform-tests/cors/simple-requests.htm >index 441a8c1ace280b8826724d8df3e1653535f5e886..77ed8ee22e70d12471c9878caba9325ec0c6a026 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/simple-requests.htm >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/simple-requests.htm >@@ -61,10 +61,17 @@ check_simple_headers({ > 'content-type': 'text/plain; parameter=whatever' > }) > >+check_simple_headers({ >+ 'save-data': 'on', >+ 'device-memory': '2.0', >+ 'dpr': '3.0', >+ 'width': '1200', >+ 'viewport-width': '1300' >+ }) >+ > check_simple('Get', {'content-type': 'text/plain; parameter=extra_bonus'}) > check_simple('post', {'content-type': 'text/plain'}) > >- > /* Extra async test */ > > var simple_async = async_test("Check simple headers (async)") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/cors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/cors/w3c-import.log >index 680f670ae2d972aa99b28cb6e0209b32d371fcd0..e8916ef1ecb0d8fe073c5d2465e0288553c7e05c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/cors/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/cors/w3c-import.log >@@ -20,7 +20,9 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window.js > /LayoutTests/imported/w3c/web-platform-tests/cors/allow-headers.htm > /LayoutTests/imported/w3c/web-platform-tests/cors/basic.htm >+/LayoutTests/imported/w3c/web-platform-tests/cors/client-hint-request-headers.htm > /LayoutTests/imported/w3c/web-platform-tests/cors/credentials-flag.htm >+/LayoutTests/imported/w3c/web-platform-tests/cors/image-tainting-in-cross-origin-iframe.sub.html > /LayoutTests/imported/w3c/web-platform-tests/cors/late-upload-events.htm > /LayoutTests/imported/w3c/web-platform-tests/cors/origin.htm > /LayoutTests/imported/w3c/web-platform-tests/cors/preflight-cache.htm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/credential-management/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..12f907ceb41814018b7348d430d7be5bb9dc7372 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/OWNERS >@@ -0,0 +1 @@ >+@mikewest >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4b5fe7c69ab1ef9bfe25b4b4166ef87317da2327 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https-expected.txt >@@ -0,0 +1,15 @@ >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/federatedcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/echoing-nester.html?origin=https://localhost:9443&file=federatedcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/echoing-nester.html?origin=https://xn--lve-6lad.localhost:9443&file=federatedcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/federatedcredential-get.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL Same-origin IFrame does not throw. assert_equals: expected "resolved" but got "rejected" >+TIMEOUT Cross-origin IFrame throws 'NotAllowedError'. Test timed out >+FAIL Same-origin IFrame in same-origin IFrame does not throw. assert_equals: expected "resolved" but got "rejected" >+TIMEOUT Same-origin IFrame in same-origin IFrame throws 'NotAllowedError'. Test timed out >+TIMEOUT Cross-origin IFrame in same-origin IFrame throws 'NotAllowedError'. Test timed out >+TIMEOUT Cross-origin IFrame in same-cross-origin throws 'NotAllowedError'. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..08688ab440bbfdf76896da5353bdddb3e9876c34 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https.html >@@ -0,0 +1,74 @@ >+<!DOCTYPE html> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+function create_iframe_test(origin, expectation) { >+ return function (t) { >+ assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); >+ window.addEventListener("load", _ => { >+ var iframe = document.createElement("iframe"); >+ iframe.src = origin + "/credential-management/support/federatedcredential-get.html"; >+ window.addEventListener("message", t.step_func(e => { >+ if (e.source == iframe.contentWindow) { >+ assert_equals(e.data.status, expectation); >+ if (expectation == "rejected") { >+ assert_equals(e.data.exception, "NotAllowedError"); >+ } else { >+ assert_equals(e.data.exception, null); >+ } >+ t.done(); >+ } >+ })); >+ document.body.appendChild(iframe); >+ }); >+ }; >+} >+ >+function create_nested_iframe_test(outerOrigin, innerOrigin, expectation) { >+ return function (t) { >+ assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); >+ window.addEventListener("load", _ => { >+ var iframe = document.createElement("iframe"); >+ iframe.src = outerOrigin + "/credential-management/support/echoing-nester.html?origin=" + innerOrigin + "&file=federatedcredential-get.html"; >+ window.addEventListener("message", t.step_func(e => { >+ if (e.source == iframe.contentWindow) { >+ assert_equals(e.data.status, expectation); >+ if (expectation == "rejected") { >+ assert_equals(e.data.exception, "NotAllowedError"); >+ } else { >+ assert_equals(e.data.exception, null); >+ } >+ t.done(); >+ } >+ })); >+ document.body.appendChild(iframe); >+ }); >+ }; >+} >+ >+const SAME_ORIGIN = window.origin; >+const CROSS_ORIGIN = "https://{{domains[élève]}}:{{ports[https][0]}}"; >+ >+async_test( >+ create_iframe_test(SAME_ORIGIN, "resolved"), >+ "Same-origin IFrame does not throw."); >+async_test( >+ create_iframe_test(CROSS_ORIGIN, "rejected"), >+ "Cross-origin IFrame throws 'NotAllowedError'."); >+ >+async_test( >+ create_nested_iframe_test(SAME_ORIGIN, SAME_ORIGIN, "resolved"), >+ "Same-origin IFrame in same-origin IFrame does not throw."); >+ >+async_test( >+ create_nested_iframe_test(SAME_ORIGIN, CROSS_ORIGIN, "rejected"), >+ "Same-origin IFrame in same-origin IFrame throws 'NotAllowedError'."); >+ >+async_test( >+ create_nested_iframe_test(CROSS_ORIGIN, SAME_ORIGIN, "rejected"), >+ "Cross-origin IFrame in same-origin IFrame throws 'NotAllowedError'."); >+ >+async_test( >+ create_nested_iframe_test(CROSS_ORIGIN, CROSS_ORIGIN, "rejected"), >+ "Cross-origin IFrame in same-cross-origin throws 'NotAllowedError'."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..12bfc49355b21eecdbb6d1cf70dcb04bb57cc54f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https-expected.txt >@@ -0,0 +1,15 @@ >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/passwordcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/echoing-nester.html?origin=https://localhost:9443&file=passwordcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/echoing-nester.html?origin=https://xn--lve-6lad.localhost:9443&file=passwordcredential-get.html >+Blocked access to external URL https://xn--lve-6lad.localhost:9443/credential-management/support/passwordcredential-get.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL Same-origin IFrame does not throw. assert_equals: expected "resolved" but got "rejected" >+TIMEOUT Cross-origin IFrame throws 'NotAllowedError'. Test timed out >+FAIL Same-origin IFrame in same-origin IFrame does not throw. assert_equals: expected "resolved" but got "rejected" >+TIMEOUT Same-origin IFrame in same-origin IFrame throws. Test timed out >+TIMEOUT Cross-origin IFrame in same-origin IFrame throws. Test timed out >+TIMEOUT Cross-origin IFrame in same-cross-origin throws. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..04bb16a2670b81246ae4b8c21472e777a54a23df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https.html >@@ -0,0 +1,74 @@ >+<!DOCTYPE html> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+function create_iframe_test(origin, expectation) { >+ return function (t) { >+ assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); >+ window.addEventListener("load", _ => { >+ var iframe = document.createElement("iframe"); >+ iframe.src = origin + "/credential-management/support/passwordcredential-get.html"; >+ window.addEventListener("message", t.step_func(e => { >+ if (e.source == iframe.contentWindow) { >+ assert_equals(e.data.status, expectation); >+ if (expectation == "rejected") { >+ assert_equals(e.data.exception, "NotAllowedError"); >+ } else { >+ assert_equals(e.data.exception, null); >+ } >+ t.done(); >+ } >+ })); >+ document.body.appendChild(iframe); >+ }); >+ }; >+} >+ >+function create_nested_iframe_test(outerOrigin, innerOrigin, expectation) { >+ return function (t) { >+ assert_true(!!navigator.credentials, "`navigator.credentials` is supported."); >+ window.addEventListener("load", _ => { >+ var iframe = document.createElement("iframe"); >+ iframe.src = outerOrigin + "/credential-management/support/echoing-nester.html?origin=" + innerOrigin + "&file=passwordcredential-get.html"; >+ window.addEventListener("message", t.step_func(e => { >+ if (e.source == iframe.contentWindow) { >+ assert_equals(e.data.status, expectation); >+ if (expectation == "rejected") { >+ assert_equals(e.data.exception, "NotAllowedError"); >+ } else { >+ assert_equals(e.data.exception, null); >+ } >+ t.done(); >+ } >+ })); >+ document.body.appendChild(iframe); >+ }); >+ }; >+} >+ >+const SAME_ORIGIN = window.origin; >+const CROSS_ORIGIN = "https://{{domains[élève]}}:{{ports[https][0]}}"; >+ >+async_test( >+ create_iframe_test(SAME_ORIGIN, "resolved"), >+ "Same-origin IFrame does not throw."); >+async_test( >+ create_iframe_test(CROSS_ORIGIN, "rejected"), >+ "Cross-origin IFrame throws 'NotAllowedError'."); >+ >+async_test( >+ create_nested_iframe_test(SAME_ORIGIN, SAME_ORIGIN, "resolved"), >+ "Same-origin IFrame in same-origin IFrame does not throw."); >+ >+async_test( >+ create_nested_iframe_test(SAME_ORIGIN, CROSS_ORIGIN, "rejected"), >+ "Same-origin IFrame in same-origin IFrame throws."); >+ >+async_test( >+ create_nested_iframe_test(CROSS_ORIGIN, SAME_ORIGIN, "rejected"), >+ "Cross-origin IFrame in same-origin IFrame throws."); >+ >+async_test( >+ create_nested_iframe_test(CROSS_ORIGIN, CROSS_ORIGIN, "rejected"), >+ "Cross-origin IFrame in same-cross-origin throws."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..078a49f3beb22f238ca271ee9b227b47e6194ddf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Credential Management must not be accessible in insecure contexts assert_false: expected false got true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b1f3103da06e2ba2243f8e2107666abb42ccfdce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Test that Credential Management requires secure contexts</title> >+<link rel="help" href="https://w3c.github.io/webappsec-credential-management/#idl-index"> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script> >+"use strict"; >+ test(() => { >+ assert_false(isSecureContext); >+ assert_false('credentials' in navigator); >+ }, "Credential Management must not be accessible in insecure contexts"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/echoing-nester.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/echoing-nester.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d4f5899da7894749a51039f9d5bf3b8bfd680570 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/echoing-nester.html >@@ -0,0 +1,16 @@ >+<body> >+ <script> >+ window.addEventListener('message', m => { >+ window.parent.postMessage(m.data, '*'); >+ }); >+ >+ var u = new URL(window.location.href); >+ var origin = u.searchParams.has('origin') ? u.searchParams.get('origin') : window.origin; >+ var file = u.searchParams.has('file') ? u.searchParams.get('file') : 'passwordcredential-get.html'; >+ >+ var url = origin + "/credential-management/support/" + file; >+ var i = document.createElement('iframe'); >+ i.src = url; >+ document.body.appendChild(i); >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/federatedcredential-get.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/federatedcredential-get.html >new file mode 100644 >index 0000000000000000000000000000000000000000..476f32688f91cede949edf2a1e650ef573525bd7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/federatedcredential-get.html >@@ -0,0 +1,17 @@ >+<script> >+ navigator.credentials.get({ 'federated': { 'providers': ['https://example.com' ] } }) >+ .then(c => { >+ window.parent.postMessage({ >+ "status": "resolved", >+ "credential": c, >+ "exception": null >+ }, "*"); >+ }) >+ .catch(omg => { >+ window.parent.postMessage({ >+ "status": "rejected", >+ "credential": null, >+ "exception": omg.name >+ }, "*"); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/passwordcredential-get.html b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/passwordcredential-get.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0ec584d73d1f6d8626efe4c7190e5160fe527286 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/passwordcredential-get.html >@@ -0,0 +1,17 @@ >+<script> >+ navigator.credentials.get({ 'password': true }) >+ .then(c => { >+ window.parent.postMessage({ >+ "status": "resolved", >+ "credential": c, >+ "exception": null >+ }, "*"); >+ }) >+ .catch(omg => { >+ window.parent.postMessage({ >+ "status": "rejected", >+ "credential": null, >+ "exception": omg.name >+ }, "*"); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..af204bd6544ff1f941f3ebacef1cec1801bd48d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/echoing-nester.html >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/federatedcredential-get.html >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/support/passwordcredential-get.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/credential-management/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/credential-management/w3c-import.log >index a430c3b93fecb944866e3f0c70d1a01331522797..2b11765ffb214623f930b4d5fed92ff0ebde348d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/credential-management/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/credential-management/w3c-import.log >@@ -14,5 +14,9 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/credential-management/credentialscontainer-create-basics.https.html >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/federatedcredential-framed-get.sub.https.html > /LayoutTests/imported/w3c/web-platform-tests/credential-management/idl.https.html >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/passwordcredential-framed-get.sub.https.html >+/LayoutTests/imported/w3c/web-platform-tests/credential-management/require_securecontext.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt >index e952c79de7531e76305dd9ec879e1856810935b2..50d0147d43912e34aa4b6d76ea791ffae3a165aa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css-timing-1/frames-timing-functions-output-expected.txt >@@ -1,9 +1,9 @@ > > PASS For an input progress of 0.0, the output of a frames timing function is the first frame >-PASS At a frame boundary, the output of a frames timing function is the next frame >-PASS For an input progress of 1.0, the output of a frames timing function is the final frame >-PASS The number of frames is correctly reflected in the frames timing function output >-PASS The number of frames is correctly reflected in the frames timing function output on CSS Transitions >+FAIL At a frame boundary, the output of a frames timing function is the next frame assert_equals: expected "100px" but got "0px" >+FAIL For an input progress of 1.0, the output of a frames timing function is the final frame assert_equals: expected "100px" but got "0px" >+FAIL The number of frames is correctly reflected in the frames timing function output assert_equals: expected "10px" but got "0px" >+FAIL The number of frames is correctly reflected in the frames timing function output on CSS Transitions assert_equals: expected "10px" but got "0px" > PASS frames easing with input progress greater than 1 > PASS frames easing with input progress greater than 1.5 > PASS frames easing with input progress less than 0 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-function-parsing.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-function-parsing.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7f483bb5c8b99c08137bae5b7aec06c782c300fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-function-parsing.html >@@ -0,0 +1,53 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Color 4: color() parsing</title> >+<link rel="help" href="https://drafts.csswg.org/css-color-4/#color-function"> >+<meta name="assert" content="Tests basic parsing of the color function"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="test"></div> >+<script> >+ const div = document.querySelector("#test"); >+ function testColorFunction(description, rule, expectedValue) { >+ test(function() { >+ div.style.color = "black"; >+ div.style.color = rule; >+ assert_equals(getComputedStyle(div).color, expectedValue); >+ }, description); >+ } >+ >+ testColorFunction("Basic sRGB white", "color(srgb 1 1 1)", "color(srgb 1 1 1)"); >+ testColorFunction("White with lots of space", "color( srgb 1 1 1 )", "color(srgb 1 1 1)"); >+ testColorFunction("sRGB color", "color(srgb 0.25 0.5 0.75)", "color(srgb 0.25 0.5 0.75)"); >+ testColorFunction("Different case for sRGB", "color(SrGb 0.25 0.5 0.75)", "color(srgb 0.25 0.5 0.75)"); >+ testColorFunction("sRGB color with unnecessary decimals", "color(srgb 1.00000 0.500000 0.20)", "color(srgb 1 0.5 0.2)"); >+ testColorFunction("sRGB white with 0.5 alpha", "color(srgb 1 1 1 / 0.5)", "color(srgb 1 1 1 / 0.5)"); >+ testColorFunction("sRGB white with 0 alpha", "color(srgb 1 1 1 / 0)", "color(srgb 1 1 1 / 0)"); >+ testColorFunction("sRGB white with 50% alpha", "color(srgb 1 1 1 / 50%)", "color(srgb 1 1 1 / 0.5)"); >+ testColorFunction("sRGB white with 0% alpha", "color(srgb 1 1 1 / 0%)", "color(srgb 1 1 1 / 0)"); >+ testColorFunction("One missing component is 0", "color(srgb 1 1)", "color(srgb 1 1 0)"); >+ testColorFunction("Two missing components are 0", "color(srgb 1)", "color(srgb 1 0 0)"); >+ testColorFunction("All components missing", "color(srgb)", "color(srgb 0 0 0)"); >+ testColorFunction("Display P3 color", "color(display-p3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)"); >+ testColorFunction("Different case for Display P3", "color(dIspLaY-P3 0.6 0.7 0.8)", "color(display-p3 0.6 0.7 0.8)"); >+ >+ testColorFunction("Unknown color space should fallback", "color(unknown 1 2 3, red)", "color(unknown 1 2 3, red)"); >+ >+ testColorFunction("sRGB color with negative component should clamp to 0", "color(srgb -0.25 0.5 0.75)", "color(srgb 0 0.5 0.75)"); >+ testColorFunction("sRGB color with component > 1 should clamp", "color(srgb 0.25 1.5 0.75)", "color(srgb 0.25 1 0.75)"); >+ testColorFunction("Display P3 color with negative component should clamp to 0", "color(display-p3 0.5 -199 0.75)", "color(display-p3 0.5 0 0.75)"); >+ testColorFunction("Display P3 color with component > 1 should clamp", "color(display-p3 184 1.00001 2347329746587)", "color(display-p3 1 1 1)"); >+ testColorFunction("Alpha > 1 should clamp", "color(srgb 0.1 0.2 0.3 / 1.9)", "color(srgb 0.1 0.2 0.3)"); >+ testColorFunction("Negative alpha should clamp", "color(srgb 1 1 1 / -0.2)", "color(srgb 1 1 1 / 0)"); >+ >+ // Invalid properties >+ testColorFunction("Empty", "color()", "rgb(0, 0, 0)"); >+ testColorFunction("Bad color space", "color(banana 1 1 1)", "rgb(0, 0, 0)"); >+ testColorFunction("Bad Display P3 color space", "color(displayp3 1 1 1)", "rgb(0, 0, 0)"); >+ testColorFunction("No color space", "color(1 1 1)", "rgb(0, 0, 0)"); >+ testColorFunction("Too many parameters", "color(srgb 1 1 1 1)", "rgb(0, 0, 0)"); >+ testColorFunction("Way too many parameters", "color(srgb 1 1 1 1 1)", "rgb(0, 0, 0)"); >+ testColorFunction("Bad parameters", "color(srgb 1 eggs 1)", "rgb(0, 0, 0)"); >+ testColorFunction("Bad alpha", "color(srgb 1 1 1 / bacon)", "rgb(0, 0, 0)"); >+ testColorFunction("Junk after alpha", "color(srgb 1 1 1 / 1 cucumber)", "rgb(0, 0, 0)"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-hsl.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-hsl.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d33701759d6068e3d335a9bf17795df1a4235cd0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-hsl.html >@@ -0,0 +1,80 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Color 4: Resolving HSL color values</title> >+<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-values"> >+<meta name="assert" content="Tests if HSL color values are resolved properly"> >+<meta name="timeout" content="long"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="parent" style="color: rgb(45, 23, 27)"> >+ <div id="inner"></div> >+</div> >+ >+<script> >+ function color_test(color, expected, reason) { >+ test(function() { >+ var element = document.getElementById('inner'); >+ // Random value not in our test data. >+ fail_value = "rgb(12, 34, 223)" >+ element.style.color = "black"; >+ element.style.cssText = "color: " + fail_value + "; color: " + color; >+ >+ if (expected === null) >+ assert_equals(getComputedStyle(element).color, fail_value); >+ else >+ assert_equals(getComputedStyle(element).color, expected); >+ }, `${reason}: ${color}`); >+ } >+ >+ function expected_value(rgb_channels) { >+ if (rgb_channels === null) >+ return null; >+ else if (rgb_channels.length === 3 || rgb_channels[3] == 1 || rgb_channels[3] === undefined) >+ return "rgb(" + rgb_channels.slice(0, 3).join(", ") + ")"; >+ else >+ return "rgba(" + rgb_channels.join(", ") + ")"; >+ } >+ >+ // Taken mostly from https://drafts.csswg.org/css-color/#hsl-to-rgb >+ function hslToRgb(hue, sat, light) { >+ if (light <= .5) { >+ var t2 = light * (sat + 1); >+ } else { >+ var t2 = light + sat - (light * sat); >+ } >+ var t1 = light * 2 - t2; >+ var r = Math.min(Math.max(Math.round(hueToRgb(t1, t2, hue + 2) * 255), 0), 255); >+ var g = Math.min(Math.max(Math.round(hueToRgb(t1, t2, hue) * 255), 0), 255); >+ var b = Math.min(Math.max(Math.round(hueToRgb(t1, t2, hue - 2) * 255), 0), 255); >+ return [r,g,b]; >+ } >+ >+ function hueToRgb(t1, t2, hue) { >+ if (hue < 0) hue += 6; >+ if (hue >= 6) hue -= 6; >+ >+ if (hue < 1) return (t2 - t1) * hue + t1; >+ else if (hue < 3) return t2; >+ else if (hue < 4) return (t2 - t1) * (4 - hue) + t1; >+ else return t1; >+ } >+ >+ // Test HSL parsing >+ for (var hue of [0, 30, 60, 90, 120, 180, 210, 240, 270, 300, 330, 360]) { >+ for (var sat of [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1]) { >+ for (var light of [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1]) { >+ rgb_channels = hslToRgb(hue / 60, sat, light); >+ for (var alpha of [undefined, 0, 0.2, 1]) { >+ hsl_color = "hsl(" + hue + ", " + sat * 100 + "%, " + light * 100 + "%)"; >+ rgb_channels[3] = alpha; >+ if (alpha !== undefined) { >+ hsl_color = "hsla(" + hue + ", " + sat * 100 + "%, " + light * 100 + "%, " + alpha + ")"; >+ } >+ color_test(hsl_color, expected_value(rgb_channels), "HSL/HSLA value should parse and round correctly"); >+ } >+ } >+ } >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-keywords.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-keywords.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5cbdcbe4b078a8d5a2db857e68fa00a764ec8660 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-keywords.html >@@ -0,0 +1,205 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Color 4: Resolving keyword color values</title> >+<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-values"> >+<meta name="assert" content="Tests if keyword color values are resolved properly"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="parent" style="color: rgb(45, 23, 27)"> >+ <div id="inner"></div> >+</div> >+ >+<script> >+ function color_test(color, expected, reason) { >+ test(function() { >+ var element = document.getElementById('inner'); >+ // Random value not in our test data. >+ fail_value = "rgb(12, 34, 223)" >+ element.style.color = "black"; >+ element.style.cssText = "color: " + fail_value + "; color: " + color; >+ >+ if (expected === null) >+ assert_equals(getComputedStyle(element).color, fail_value); >+ else >+ assert_equals(getComputedStyle(element).color, expected); >+ }, `${reason}: ${color}`); >+ } >+ >+ function expected_value(rgb_channels) { >+ if (rgb_channels === null) >+ return null; >+ else if (rgb_channels.length === 3 || rgb_channels[3] == 1) >+ return "rgb(" + rgb_channels.slice(0, 3).join(", ") + ")"; >+ else >+ return "rgba(" + rgb_channels.join(", ") + ")"; >+ } >+ >+ keywords = [ >+ ['transparent', [0, 0, 0, 0]], >+ ['aliceblue', [240, 248, 255, 1]], >+ ['antiquewhite', [250, 235, 215, 1]], >+ ['aqua', [0, 255, 255, 1]], >+ ['aquamarine', [127, 255, 212, 1]], >+ ['azure', [240, 255, 255, 1]], >+ ['beige', [245, 245, 220, 1]], >+ ['bisque', [255, 228, 196, 1]], >+ ['black', [0, 0, 0, 1]], >+ ['blanchedalmond', [255, 235, 205, 1]], >+ ['blue', [0, 0, 255, 1]], >+ ['blueviolet', [138, 43, 226, 1]], >+ ['brown', [165, 42, 42, 1]], >+ ['burlywood', [222, 184, 135, 1]], >+ ['cadetblue', [95, 158, 160, 1]], >+ ['chartreuse', [127, 255, 0, 1]], >+ ['chocolate', [210, 105, 30, 1]], >+ ['coral', [255, 127, 80, 1]], >+ ['cornflowerblue', [100, 149, 237, 1]], >+ ['cornsilk', [255, 248, 220, 1]], >+ ['crimson', [220, 20, 60, 1]], >+ ['cyan', [0, 255, 255, 1]], >+ ['darkblue', [0, 0, 139, 1]], >+ ['darkcyan', [0, 139, 139, 1]], >+ ['darkgoldenrod', [184, 134, 11, 1]], >+ ['darkgray', [169, 169, 169, 1]], >+ ['darkgreen', [0, 100, 0, 1]], >+ ['darkgrey', [169, 169, 169, 1]], >+ ['darkkhaki', [189, 183, 107, 1]], >+ ['darkmagenta', [139, 0, 139, 1]], >+ ['darkolivegreen', [85, 107, 47, 1]], >+ ['darkorange', [255, 140, 0, 1]], >+ ['darkorchid', [153, 50, 204, 1]], >+ ['darkred', [139, 0, 0, 1]], >+ ['darksalmon', [233, 150, 122, 1]], >+ ['darkseagreen', [143, 188, 143, 1]], >+ ['darkslateblue', [72, 61, 139, 1]], >+ ['darkslategray', [47, 79, 79, 1]], >+ ['darkslategrey', [47, 79, 79, 1]], >+ ['darkturquoise', [0, 206, 209, 1]], >+ ['darkviolet', [148, 0, 211, 1]], >+ ['deeppink', [255, 20, 147, 1]], >+ ['deepskyblue', [0, 191, 255, 1]], >+ ['dimgray', [105, 105, 105, 1]], >+ ['dimgrey', [105, 105, 105, 1]], >+ ['dodgerblue', [30, 144, 255, 1]], >+ ['firebrick', [178, 34, 34, 1]], >+ ['floralwhite', [255, 250, 240, 1]], >+ ['forestgreen', [34, 139, 34, 1]], >+ ['fuchsia', [255, 0, 255, 1]], >+ ['gainsboro', [220, 220, 220, 1]], >+ ['ghostwhite', [248, 248, 255, 1]], >+ ['gold', [255, 215, 0, 1]], >+ ['goldenrod', [218, 165, 32, 1]], >+ ['gray', [128, 128, 128, 1]], >+ ['green', [0, 128, 0, 1]], >+ ['greenyellow', [173, 255, 47, 1]], >+ ['grey', [128, 128, 128, 1]], >+ ['honeydew', [240, 255, 240, 1]], >+ ['hotpink', [255, 105, 180, 1]], >+ ['indianred', [205, 92, 92, 1]], >+ ['indigo', [75, 0, 130, 1]], >+ ['ivory', [255, 255, 240, 1]], >+ ['khaki', [240, 230, 140, 1]], >+ ['lavender', [230, 230, 250, 1]], >+ ['lavenderblush', [255, 240, 245, 1]], >+ ['lawngreen', [124, 252, 0, 1]], >+ ['lemonchiffon', [255, 250, 205, 1]], >+ ['lightblue', [173, 216, 230, 1]], >+ ['lightcoral', [240, 128, 128, 1]], >+ ['lightcyan', [224, 255, 255, 1]], >+ ['lightgoldenrodyellow', [250, 250, 210, 1]], >+ ['lightgray', [211, 211, 211, 1]], >+ ['lightgreen', [144, 238, 144, 1]], >+ ['lightgrey', [211, 211, 211, 1]], >+ ['lightpink', [255, 182, 193, 1]], >+ ['lightsalmon', [255, 160, 122, 1]], >+ ['lightseagreen', [32, 178, 170, 1]], >+ ['lightskyblue', [135, 206, 250, 1]], >+ ['lightslategray', [119, 136, 153, 1]], >+ ['lightslategrey', [119, 136, 153, 1]], >+ ['lightsteelblue', [176, 196, 222, 1]], >+ ['lightyellow', [255, 255, 224, 1]], >+ ['lime', [0, 255, 0, 1]], >+ ['limegreen', [50, 205, 50, 1]], >+ ['linen', [250, 240, 230, 1]], >+ ['magenta', [255, 0, 255, 1]], >+ ['maroon', [128, 0, 0, 1]], >+ ['mediumaquamarine', [102, 205, 170, 1]], >+ ['mediumblue', [0, 0, 205, 1]], >+ ['mediumorchid', [186, 85, 211, 1]], >+ ['mediumpurple', [147, 112, 219, 1]], >+ ['mediumseagreen', [60, 179, 113, 1]], >+ ['mediumslateblue', [123, 104, 238, 1]], >+ ['mediumspringgreen', [0, 250, 154, 1]], >+ ['mediumturquoise', [72, 209, 204, 1]], >+ ['mediumvioletred', [199, 21, 133, 1]], >+ ['midnightblue', [25, 25, 112, 1]], >+ ['mintcream', [245, 255, 250, 1]], >+ ['mistyrose', [255, 228, 225, 1]], >+ ['moccasin', [255, 228, 181, 1]], >+ ['navajowhite', [255, 222, 173, 1]], >+ ['navy', [0, 0, 128, 1]], >+ ['oldlace', [253, 245, 230, 1]], >+ ['olive', [128, 128, 0, 1]], >+ ['olivedrab', [107, 142, 35, 1]], >+ ['orange', [255, 165, 0, 1]], >+ ['orangered', [255, 69, 0, 1]], >+ ['orchid', [218, 112, 214, 1]], >+ ['palegoldenrod', [238, 232, 170, 1]], >+ ['palegreen', [152, 251, 152, 1]], >+ ['paleturquoise', [175, 238, 238, 1]], >+ ['palevioletred', [219, 112, 147, 1]], >+ ['papayawhip', [255, 239, 213, 1]], >+ ['peachpuff', [255, 218, 185, 1]], >+ ['peru', [205, 133, 63, 1]], >+ ['pink', [255, 192, 203, 1]], >+ ['plum', [221, 160, 221, 1]], >+ ['powderblue', [176, 224, 230, 1]], >+ ['purple', [128, 0, 128, 1]], >+ ['red', [255, 0, 0, 1]], >+ ['rosybrown', [188, 143, 143, 1]], >+ ['royalblue', [65, 105, 225, 1]], >+ ['saddlebrown', [139, 69, 19, 1]], >+ ['salmon', [250, 128, 114, 1]], >+ ['sandybrown', [244, 164, 96, 1]], >+ ['seagreen', [46, 139, 87, 1]], >+ ['seashell', [255, 245, 238, 1]], >+ ['sienna', [160, 82, 45, 1]], >+ ['silver', [192, 192, 192, 1]], >+ ['skyblue', [135, 206, 235, 1]], >+ ['slateblue', [106, 90, 205, 1]], >+ ['slategray', [112, 128, 144, 1]], >+ ['slategrey', [112, 128, 144, 1]], >+ ['snow', [255, 250, 250, 1]], >+ ['springgreen', [0, 255, 127, 1]], >+ ['steelblue', [70, 130, 180, 1]], >+ ['tan', [210, 180, 140, 1]], >+ ['teal', [0, 128, 128, 1]], >+ ['thistle', [216, 191, 216, 1]], >+ ['tomato', [255, 99, 71, 1]], >+ ['turquoise', [64, 224, 208, 1]], >+ ['violet', [238, 130, 238, 1]], >+ ['wheat', [245, 222, 179, 1]], >+ ['white', [255, 255, 255, 1]], >+ ['whitesmoke', [245, 245, 245, 1]], >+ ['yellow', [255, 255, 0, 1]], >+ ['yellowgreen', [154, 205, 50, 1]], >+ ] >+ >+ for (var value in keywords) { >+ items_to_test = keywords[value]; >+ keyword = items_to_test[0]; >+ expected = expected_value(items_to_test[1]); >+ letter = value % keyword.length; >+ replacement = keyword; >+ >+ color_test(keyword, expected, "Keyword should parse properly"); >+ color_test(keyword.toUpperCase(), expected, "Keywords should be case-insensitive"); >+ replacement[letter] = "\\" + keyword.codePointAt(letter); >+ color_test(replacement, expected, "Code point should parse"); >+ color_test(keyword.slice(0, letter) + keyword.slice(letter + 1, keyword.length), null, "Partial keywords shouldn't parse"); >+ if (keyword.indexOf('k') !== -1) >+ color_test(keyword.replace('k', 'âª'), null, "Unicode modification shouldn't parse"); >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b3d1c740c57bab9b8daf8842d6f50e1435aa75a4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving.html >@@ -0,0 +1,180 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Color 4: Resolving color values</title> >+<link rel="author" title="Chris Nardi" href="mailto:csnardi1@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/css-color-4/#resolving-color-values"> >+<meta name="assert" content="Tests if color values are resolved properly"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="parent" style="color: rgb(45, 23, 27)"> >+ <div id="inner"></div> >+</div> >+ >+<script> >+ function color_test(color, expected, reason) { >+ test(function() { >+ var element = document.getElementById('inner'); >+ // Random value not in our test data. >+ fail_value = "rgb(12, 34, 223)" >+ element.style.color = "black"; >+ element.style.cssText = "color: " + fail_value + "; color: " + color; >+ >+ if (expected === null) >+ assert_equals(getComputedStyle(element).color, fail_value); >+ else >+ assert_equals(getComputedStyle(element).color, expected); >+ }, `${reason}: ${color}`); >+ } >+ >+ function expected_value(rgb_channels) { >+ if (rgb_channels === null) >+ return null; >+ else if (rgb_channels.length === 3 || rgb_channels[3] == 1) >+ return "rgb(" + rgb_channels.slice(0, 3).join(", ") + ")"; >+ else >+ return "rgba(" + rgb_channels.join(", ") + ")"; >+ } >+ >+ tests = [ >+ // Keyword tests >+ ["", null, "Should not parse invalid keyword"], >+ [" /* hey */\n", null, "Should not parse invalid keyword"], >+ ["4", null, "Should not parse invalid keyword"], >+ ["top", null, "Should not parse invalid keyword"], >+ ["/**/transparent", [0, 0, 0, 0], "Should parse to completely transparent"], >+ ["transparent", [0, 0, 0, 0], "Should parse to completely transparent"], >+ [" transparent\n", [0, 0, 0, 0], "Should parse to completely transparent"], >+ ["TransParent", [0, 0, 0, 0], "Should parse to completely transparent"], >+ ["currentColor", [45, 23, 27], "Should be same as parent color"], >+ ["CURRENTcolor", [45, 23, 27], "Should be same as parent color"], >+ ["current-Color", null, "Should not parse invalid keyword"], >+ ["black", [0, 0, 0, 1], "Should parse as correct value"], >+ ["white", [255, 255, 255, 1], "Should parse as correct value"], >+ ["fuchsia", [255, 0, 255, 1], "Should parse as correct value"], >+ ["cyan", [0, 255, 255, 1], "Should parse as correct value"], >+ ["CyAn", [0, 255, 255, 1], "Should parse as cyan"], >+ >+ // Hex tests >+ ["#", null, "Should not parse invalid hex"], >+ ["#f", null, "Should not parse invalid hex"], >+ ["#ff", null, "Should not parse invalid hex"], >+ ["#fff", [255, 255, 255, 1], "Valid 3-digit hex"], >+ ["#ffg", null, "Should not parse invalid hex"], >+ ["#ffff", [255, 255, 255, 1], "Valid 4-digit hex"], >+ ["#fffg", null, "Should not parse invalid hex"], >+ ["#fffff", null, "Should not parse invalid hex"], >+ ["#ffffff", [255, 255, 255, 1], "Valid 6-digit hex"], >+ ["#fffffg", null, "Should not parse invalid hex"], >+ ["#fffffff", null, "Should not parse invalid hex"], >+ ["#ffffffff", [255, 255, 255, 1], "Valid 8-digit hex"], >+ ["#fffffffg", null, "Should not parse invalid hex"], >+ ["#fffffffff", null, "Should not parse invalid hex"], >+ ["#FFCc99", [255, 204, 153, 1], "Valid 6-digit hex"], >+ ["#369", [51, 102, 153, 1], "Valid 3-digit hex"], >+ >+ // RGB tests >+ ["rgb(00, 51, 102)", [0, 51, 102, 1], "Valid numbers should be parsed"], >+ ["r\\gb(00, 51, 102)", [0, 51, 102, 1], "Correct escape sequences should still parse"], >+ ["r\\67 b(00, 51, 102)", [0, 51, 102, 1], "Correct escape sequences should still parse"], >+ ["RGB(153, 204, 255)", [153, 204, 255, 1], "Capitalization should not affect parsing"], >+ ["rgB(0, 0, 0)", [0, 0, 0, 1], "Capitalization should not affect parsing"], >+ ["rgB(0, 51, 255)", [0, 51, 255, 1], "Capitalization should not affect parsing"], >+ ["rgb(0,51,255)", [0, 51, 255, 1], "Lack of whitespace should not affect parsing"], >+ ["rgb(0\t, 51 ,255)", [0, 51, 255, 1], "Whitespace should not affect parsing"], >+ ["rgb(/* R */0, /* G */51, /* B */255)", [0, 51, 255, 1], "Comments should be allowed within function"], >+ ["rgb(-51, 306, 0)", [0, 255, 0, 1], "Invalid values should be clamped to 0 and 255 respectively"], >+ ["rgb(42%, 3%, 50%)", [107, 8, 128, 1], "Valid percentages should be parsed"], >+ ["RGB(100%, 100%, 100%)", [255, 255, 255, 1], "Capitalization should not affect parsing"], >+ ["rgB(0%, 0%, 0%)", [0, 0, 0, 1], "Capitalization should not affect parsing"], >+ ["rgB(10%, 20%, 30%)", [26, 51, 77, 1], "Capitalization should not affect parsing"], >+ ["rgb(10%,20%,30%)", [26, 51, 77, 1], "Whitespace should not affect parsing"], >+ ["rgb(10%\t, 20% ,30%)", [26, 51, 77, 1], "Whitespace should not affect parsing"], >+ ["rgb(/* R */ 10%, /* G */ 20%, /* B */ 30%)", [26, 51, 77, 1], "Comments should not affect parsing"], >+ ["rgb(-12%, 110%, 1400%)", [0, 255, 255, 1], "Invalid values should be clamped to 0 and 255 respectively"], >+ ["rgb(10%, 50%, 0)", null, "Values must be all numbers or all percentages"], >+ ["rgb(255, 50%, 0%)", null, "Values must be all numbers or all percentages"], >+ ["rgb(0, 0 0)", null, "Comma optional syntax requires no commas at all"], >+ ["rgb(0, 0, 0deg)", null, "Angles are not accepted in the rgb function"], >+ ["rgb(0, 0, light)", null, "Keywords are not accepted in the rgb function"], >+ ["rgb()", null, "The rgb function requires 3 or 4 arguments"], >+ ["rgb(0)", null, "The rgb function requires 3 or 4 arguments"], >+ ["rgb(0, 0)", null, "The rgb function requires 3 or 4 arguments"], >+ ["rgb(0%)", null, "The rgb function requires 3 or 4 arguments"], >+ ["rgb(0%, 0%)", null, "The rgb function requires 3 or 4 arguments"], >+ ["rgb(0, 0, 0, 0)", [0, 0, 0, 0], "RGB and RGBA are synonyms"], >+ ["rgb(0%, 0%, 0%, 0%)", [0, 0, 0, 0], "RGB and RGBA are synonyms"], >+ ["rgb(0%, 0%, 0%, 0)", [0, 0, 0, 0], "RGB and RGBA are synonyms"], >+ ["rgba(0, 0, 0, 0)", [0, 0, 0, 0], "Valid numbers should be parsed"], >+ ["rgba(204, 0, 102, 0.3)", [204, 0, 102, 0.3], "Valid numbers should be parsed"], >+ ["RGBA(255, 255, 255, 0)", [255, 255, 255, 0], "Capitalization should not affect parsing"], >+ ["rgBA(0, 51, 255, 1)", [0, 51, 255, 1], "Capitalization should not affect parsing"], >+ ["rgba(0, 51, 255, 1.1)", [0, 51, 255, 1], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0, 51, 255, 37)", [0, 51, 255, 1], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0, 51, 255, 0.42)", [0, 51, 255, 0.42], "Valid numbers should be parsed"], >+ ["rgba(0, 51, 255, 0)", [0, 51, 255, 0], "Valid numbers should be parsed"], >+ ["rgba(0, 51, 255, -0.1)", [0, 51, 255, 0], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0, 51, 255, -139)", [0, 51, 255, 0], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["RGBA(100%, 100%, 100%, 0)", [255, 255, 255, 0], "Capitalization should not affect parsing"], >+ ["rgba(42%, 3%, 50%, 0.3)", [107, 8, 128, 0.3], "Valid percentages should be parsed"], >+ ["rgBA(0%, 20%, 100%, 1)", [0, 51, 255, 1], "Capitalization should not affect parsing"], >+ ["rgba(0%, 20%, 100%, 1.1)", [0, 51, 255, 1], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0%, 20%, 100%, 37)", [0, 51, 255, 1], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0%, 20%, 100%, 0.42)", [0, 51, 255, 0.42], "Valid percentages should be parsed"], >+ ["rgba(0%, 20%, 100%, 0)", [0, 51, 255, 0], "Valid percentages should be parsed"], >+ ["rgba(0%, 20%, 100%, -0.1)", [0, 51, 255, 0], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(0%, 20%, 100%, -139)", [0, 51, 255, 0], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["rgba(255, 255, 255, 0%)", [255, 255, 255, 0], "Percent alpha values are accepted in rgb/rgba"], >+ ["rgba(0%, 0%, 0%, 0%)", [0, 0, 0, 0], "Percent alpha values are accepted in rgb/rgba"], >+ ["rgba(0%, 0%, 0%)", [0, 0, 0, 1], "RGB and RGBA are synonyms"], >+ ["rgba(0, 0, 0)", [0, 0, 0, 1], "RGB and RGBA are synonyms"], >+ ["rgba(10%, 50%, 0, 1)", null, "Values must be all numbers or all percentages"], >+ ["rgba(255, 50%, 0%, 1)", null, "Values must be all numbers or all percentages"], >+ ["rgba(0, 0, 0 0)", null, "Comma optional syntax requires no commas at all"], >+ ["rgba(0, 0, 0, 0deg)", null, "Angles are not accepted in the rgb function"], >+ ["rgba(0, 0, 0, light)", null, "Keywords are not accepted in the rgb function"], >+ ["rgba()", null, "The rgba function requires 3 or 4 arguments"], >+ ["rgba(0)", null, "The rgba function requires 3 or 4 arguments"], >+ ["rgba(0, 0, 0, 0, 0)", null, "The rgba function requires 3 or 4 arguments"], >+ ["rgba(0%)", null, "The rgba function requires 3 or 4 arguments"], >+ ["rgba(0%, 0%)", null, "The rgba function requires 3 or 4 arguments"], >+ ["rgba(0%, 0%, 0%, 0%, 0%)", null, "The rgba function requires 3 or 4 arguments"], >+ >+ // HSL tests >+ ["HSL(0, 0%, 0%)", [0, 0, 0, 1], "Capitalization should not affect parsing"], >+ ["hsL(0, 100%, 50%)", [255, 0, 0, 1], "Capitalization should not affect parsing"], >+ ["hsl(60, 100%, 37.5%)", [191, 191, 0, 1], "Valid numbers should be parsed"], >+ ["hsl(780, 100%, 37.5%)", [191, 191, 0, 1], "Angles are represented as a part of a circle and wrap around"], >+ ["hsl(-300, 100%, 37.5%)", [191, 191, 0, 1], "Angles are represented as a part of a circle and wrap around"], >+ ["hsl(300, 50%, 50%)", [191, 64, 191, 1], "Valid numbers should be parsed"], >+ ["hsl(30deg, 100%, 100%)", [255, 255, 255, 1], "Angles are accepted in HSL/HSLA"], >+ ["hsl(0, 0%, 0%, 0%)", [0, 0, 0, 0], "HSL and HSLA are synonyms"], >+ ["hsl(10, 50%, 0)", null, "The second and third parameters of hsl/hsla must be a percent"], >+ ["hsl(50%, 50%, 0%)", null, "The first parameter of hsl/hsla must be a number or angle"], >+ ["hsl(0, 0% 0%)", null, "Comma optional syntax requires no commas at all"], >+ ["hsl(0, 0%, light)", null, "Keywords are not accepted in the hsl function"], >+ ["hsl()", null, "The hsl function requires 3 or 4 arguments"], >+ ["hsl(0)", null, "The hsl function requires 3 or 4 arguments"], >+ ["hsl(0, 0%)", null, "The hsl function requires 3 or 4 arguments"], >+ ["HSLA(-300, 100%, 37.5%, 1)", [191, 191, 0, 1], "Angles are represented as a part of a circle and wrap around"], >+ ["hsLA(-300, 100%, 37.5%, 12)", [191, 191, 0, 1], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["hsla(-300, 100%, 37.5%, 0.2)", [191, 191, 0, 0.2], "Angles are represented as a part of a circle and wrap around"], >+ ["hsla(-300, 100%, 37.5%, 0)", [191, 191, 0, 0], "Angles are represented as a part of a circle and wrap around"], >+ ["hsla(-300, 100%, 37.5%, -3)", [191, 191, 0, 0], "Invalid alpha values should be clamped to 0 and 1 respectively"], >+ ["hsla(0, 0%, 0%, 50%)", [0, 0, 0, 0.5], "Percent alpha values are accepted in hsl/hsla"], >+ ["hsla(30deg, 100%, 100%, 1)", [255, 255, 255, 1], "Angles are accepted in HSL/HSLA"], >+ ["hsla(10, 50%, 0, 1)", null, "The second and third parameters of hsl/hsla must be a percent"], >+ ["hsla(50%, 50%, 0%, 1)", null, "The first parameter of hsl/hsla must be a number or angle"], >+ ["hsla(0, 0% 0%, 1)", null, "Comma optional syntax requires no commas at all"], >+ ["hsla(0, 0%, light, 1)", null, "Keywords are not accepted in the hsla function"], >+ ["hsla()", null, "The hsla function requires 3 or 4 arguments"], >+ ["hsla(0)", null, "The hsla function requires 3 or 4 arguments"], >+ ["hsla(0, 0%)", null, "The hsla function requires 3 or 4 arguments"], >+ ["hsla(0, 0%, 0%, 1, 0%)", null, "The hsla function requires 3 or 4 arguments"] >+ ] >+ >+ for (var value in tests) { >+ items_to_test = tests[value]; >+ color_test(items_to_test[0], expected_value(items_to_test[1]), items_to_test[2]); >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..1919ab4e4f6e29bcdfd3d5730705d7f13299742a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(75.62% 30.45% 47.56%)} /* lab(50 50 0) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004.html >index 0037a1e7653e2ffc8f94d283e0564dd26ec2e9b2..2cd327f2699cd77f2fc954eb94ce9bd8e41435b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-004.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-004-ref.html"> > <meta name="assert" content="lab() with no alpha, positive a axis"> > <style> > .test { color: red; } > .test { color: lab(50 50 0)} >- .match { color: rgb(75.62%, 30.45%, 47.56%)} /* lab(50,0,0) converted to sRGB */ >+ .match { color: rgb(75.62%, 30.45%, 47.56%)} /* lab(50 50 0) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..207973e38ebc4269f669bb20760f3da73998227d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lab(70 -45 0) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005.html >index 366cd1bc304e89419ccbc09579ae476653cd0528..846430f8360bf7452891d2b8efd4d3f81a5d2cf7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-005.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-005-ref.html"> > <meta name="assert" content="lab() with no alpha, negative a axis"> > <style> > .test { color: red; } > .test { color: lab(70 -45 0)} >- .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lab(70,-45,0) converted to sRGB */ >+ .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lab(70 -45 0) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..8747c97bbfb235a8e993b15cce7a31df3dc50ee3 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lab(70 0 70) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006.html >index 079c37978f43152d9d5822b830db6ebb867073a6..926c1f08236ae97054ea7055c9624858b9166ee5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-006.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-006-ref.html"> > <meta name="assert" content="lab() with no alpha, positive b axis"> > <style> > .test { color: red; } > .test { color: lab(70 0 70)} >- .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lab(70,0,70) converted to sRGB */ >+ .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lab(70 0 70) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..00bdb09d4f6e6f04c012535e08066bff788e5d23 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lab(55 0 -60) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007.html >index 4cdb35788d4d63b6906e0d9e718e6d46d5ac8b6e..917bc1a399fd839daf4771e0e1c74235d2f1308d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lab-007.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-007-ref.html"> > <meta name="assert" content="lab() with no alpha, negative b axis"> > <style> > .test { color: red; } > .test { color: lab(55 0 -60)} >- .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lab(55,0,-60) converted to sRGB */ >+ .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lab(55 0 -60) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-001.html >index 966e1fd405501f65a29d5a6ccaa9121ee6cfe01a..3b0b5af0a55ea70a61afee62c2ddcde6c912fc28 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-001.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="lch() with no alpha"> > <style> >- .test {color: lab(46.277 -67.989 134.391)} /* green (sRGB #008000) converted to LCH */ >+ .test {color: lch(46.277 67.945 134.427)} /* green (sRGB #008000) converted to LCH */ > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..1919ab4e4f6e29bcdfd3d5730705d7f13299742a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(75.62% 30.45% 47.56%)} /* lab(50 50 0) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004.html >index 46ac7d3988e0a37c5c6d401a3912a5b8783d08af..0db243c91833a527b6736eeb1a112e6fafefadf1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-004.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-004-ref.html"> > <meta name="assert" content="lch() with no alpha, positive a axis"> > <style> > .test { color: red; } > .test { color: lch(50 50 0)} >- .match { color: rgb(75.62%, 30.45%, 47.56%)} /* lch(50,0,0) converted to sRGB */ >+ .match { color: rgb(75.62%, 30.45%, 47.56%)} /* lch(50 50 0) converted to sRGB (happens to be the same as lab(50 50 0)*/ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..207973e38ebc4269f669bb20760f3da73998227d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lab(70 -45 0) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005.html >index 789d4b23fefe711b2e3ad7273dcd8b94128fb16a..c16d02b335c15791c69872573acd185644fb0e74 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-005.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-005-ref.html"> > <meta name="assert" content="lch() with no alpha, negative a axis"> > <style> > .test { color: red; } >- .test { color: lab(70 45 180)} >- .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lch(70,45,180) converted to sRGB */ >+ .test { color: lch(70 45 -180)} >+ .match { color: rgb(10.79%, 75.55%, 66.40%)} /* lch(70 45 180) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..8747c97bbfb235a8e993b15cce7a31df3dc50ee3 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lab(70 0 70) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006.html >index 760362cbf93a5b32390cba175319ff4508a77ba4..c3bbd14f5078406449dbf6ec1cd6b5999ef26e2c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-006.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-006-ref.html"> > <meta name="assert" content="lch() with no alpha, positive b axis"> > <style> > .test { color: red; } >- .test { color: lab(70 70 90)} >- .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lch(70,70,90) converted to sRGB */ >+ .test { color: lch(70 70 90)} >+ .match { color: rgb(76.62%, 66.36%, 5.58%)} /* lch(70 70 90) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007-expected.html >index ddfa9100cbef6094375df8b40eeb9673e690d4f7..00bdb09d4f6e6f04c012535e08066bff788e5d23 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007-expected.html >@@ -1,9 +1,11 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>Black text reference</title> >+<title>CSS Color 4: Specifying Lab and LCH</title> > <style> >- .test { color: #000000} >+ .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lab(55 0 -60) converted to sRGB */ > </style> > <body> >- <p class="test">Test passes if this text is black</p> >+ <p>Test passes if the two lines of filler text are the same color.</p> >+ <p class="match">Filler text. Filler text. Filler text. </p> >+ <p class="match">Filler text. Filler text. Filler text. </p> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007.html >index 7b8c41fa9c759f9342476bb167d5f8be61abf7e1..4646bc9a32433389b7014ce766345354fcbb7c8d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/lch-007.html >@@ -3,12 +3,12 @@ > <title>CSS Color 4: Specifying Lab and LCH</title> > <link rel="author" title="Chris Lilley" href="mailto:chris@w3.org"> > <link rel="help" href="https://drafts.csswg.org/css-color-4/#specifying-lab-lch"> >-<link rel="match" href="blacktext-ref.html"> >+<link rel="match" href="lab-007-ref.html"> > <meta name="assert" content="lab() with no alpha, negative b axis"> > <style> > .test { color: red; } >- .test { color: lch(55 60 270)} >- .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lch(55,60,270) converted to sRGB */ >+ .test { color: lch(56 58 275)} >+ .match { color: rgb(12.81%, 53.10%, 92.76%)} /* lch(56 58 275) converted to sRGB */ > </style> > <body> > <p>Test passes if the two lines of filler text are the same color.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-002.html >index d9ca6854d10ffe6f4fb176de05e6c0da501f0279..a50620b9b14f2e176577d04d5750f0752e0a179c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-002.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="rgb() with 8-bit numbers and no alpha, also no comma"> > <style> >- .test {color: rgb(0 80.0 0)} >+ .test {color: rgb(0 128.0 0)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-004.html >index 7fab3173c882755773ea5cea5d9cc68f089a8af9..7bace000ab37470b6a3dd191f6074fe4f5ef9f6f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-004.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="rgb() with 8-bit numbers and numeric alpha, also no comma"> > <style> >- .test {color: rgb(0 80.0 0 / 1)} >+ .test {color: rgb(0 128.0 0 / 1)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-006.html >index 9b4d4fcf037b457d482f765b7e5d8082ee604aaf..5ccb8ea135fa44ac8e2d224ef3587ee9081db674 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-006.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-006.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="rgb() with 8-bit numbers and percent alpha, also no comma"> > <style> >- .test {color: rgb(0 80.0 0 / 100%)} >+ .test {color: rgb(0 128.0 0 / 100%)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008.html >index f8114f00de19b55782763344f3286e554940975a..bd3215d89fca4680f8db855a0e3af30c99b003af 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="legacy rgb() with 8-bit numbers and percent alpha, with commas"> > <style> >- .test {color: rgb(0, 80.0, 0, 100%)} >+ .test {color: rgb(0, 128.0, 0, 100%)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-rounding-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-rounding-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ecf93f0e8186766a2f6a4e282b8a7a5fa7fa2b50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-rounding-001.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Color 4: RGB Channel Rounding</title> >+<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-color-4/#rgb-functions"> >+<meta name="assert" content="Tests if RGB channels indicated as decimals are rounded correctly"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div id="test" style="color: rgb(45, 23, 27)"></div> >+ >+<script> >+ test(function() { >+ var element = document.getElementById('test'); >+ color = "rgb(2.5, 3.4, 4.6)"; >+ expected = ["rgb(3, 3, 5)", color]; >+ element.style.cssText = "color: " + color; >+ assert_in_array(getComputedStyle(element).color, expected); >+ }, 'Tests that RGB channels are rounded appropriately'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-002.html >index 3113985e801ac9b149693b05e9ef59385385075b..14dd2b56e7ff8a9513afd3cca7b5e59fb43085dd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-002.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="legacy rgba() with 8-bit numbers and no alpha, also no comma"> > <style> >- .test {color: rgba(0 80.0 0)} >+ .test {color: rgba(0 128.0 0)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-004.html >index 0d75d4fb48c7d5b96504d2e0d2b0be3ff7dc45dc..22e5854e1a04ad0506f87392ac75aa73facf7c87 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-004.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="legacy rgba() with 8-bit numbers and numeric alpha, also no comma"> > <style> >- .test {color: rgba(0 80.0 0 / 1)} >+ .test {color: rgba(0 128.0 0 / 1)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-006.html >index e67956e11d140b13ec683a4c089fcc89d22532b1..3b397ab31112cf0a9546df523e59b3f19fef3e06 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-006.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-006.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="legacy rgba() with 8-bit numbers and percent alpha, also no comma"> > <style> >- .test {color: rgba(0 80.0 0 / 100%)} >+ .test {color: rgba(0 128.0 0 / 100%)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-008.html >index 19bb95601dbaa67837289302a93c46030f0726e6..65eab55794c39e47d6afb5b71e5fea4b9b671b37 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-008.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-008.html >@@ -6,7 +6,7 @@ > <link rel="match" href="greentext-ref.html"> > <meta name="assert" content="legacy rgba() with 8-bit numbers and percent alpha, with commas"> > <style> >- .test {color: rgba(0, 80.0, 0, 100%)} >+ .test {color: rgba(0, 128.0, 0, 100%)} > </style> > <body> > <p class="test">Test passes if this text is green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.6-a.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.6-a.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a43b99cb4b0c65b8047300cb8ed574e45ef07a67 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.6-a.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: opacity</title> >+ <link rel="author" title="L. David Baron" href="https://dbaron.org/" /> >+ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#transparency" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#rgb-color" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Opacity of 0.6 makes box partially opaque. Colors are in sRGB color space (may test)." /> >+ <style type="text/css"><![CDATA[ >+ html, body { background: white; color: black; } >+ p { color: black; } >+ #one { color: rgb(102, 102, 102); } >+ #two { opacity: 0.6; } >+ ]]></style> >+ </head> >+ <body> >+ <p id="one">This text should be the same color as the line below.</p> >+ <p id="two">This text should be the same color as the line above.</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-zorder-c.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-zorder-c.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..230d721c2250ea41568ee4bf38287b9ed17ed5bf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-zorder-c.xht >@@ -0,0 +1,108 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: opacity</title> >+ <link rel="author" title="L. David Baron" href="https://dbaron.org/" /> >+ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#transparency" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Opacity has z-ordering treatment of positioned elements and z-index applies." /> >+ <style type="text/css"><![CDATA[ >+ table { border-spacing: 2px; } >+ td { border: 1px solid; } >+ td, div { width: 10px; height: 10px; } >+ div.up { margin-top: -10px; } >+ div.pos { position: relative; } >+ div.opc { opacity: 0.99; } >+ div.red { background: red; } >+ div.green { background: green; } >+ .z0 { z-index: 0; } >+ .z1 { z-index: 1; } >+ .zm1 { z-index: -1; } >+ ]]></style> >+ </head> >+ <body> >+ <p>Each of the following boxes should have a green or >+ very-nearly-green square inside of it:</p> >+ <table><tr> >+ <!-- baseline --> >+ <td> >+ <div class="red"></div> >+ <div class="up green"></div> >+ </td> >+ <!-- z-index auto or 0 is in positioned elements layer --> >+ <td> >+ <div class="pos red"></div> >+ <div class="up opc green"></div> >+ <div class="up red"></div> >+ </td> >+ <td> >+ <div class="opc red"></div> >+ <div class="up pos green"></div> >+ <div class="up red"></div> >+ </td> >+ <td> >+ <div class="pos red"></div> >+ <div class="up opc green z0"></div> >+ <div class="up red"></div> >+ </td> >+ <td> >+ <div class="opc red"></div> >+ <div class="up pos green z0"></div> >+ <div class="up red"></div> >+ </td> >+ <td> >+ <div class="pos red z0"></div> >+ <div class="up opc green"></div> >+ <div class="up red"></div> >+ </td> >+ <td> >+ <div class="opc red z0"></div> >+ <div class="up pos green"></div> >+ <div class="up red"></div> >+ </td> >+ <!-- baseline: make sure z-index: auto works --> >+ <td> >+ <div class="pos"> >+ <div class="pos green z1"></div> >+ <div class="up pos red zm1"></div> >+ </div> >+ <div class="up pos red z0"></div> >+ <div class="up pos red"></div> >+ <div class="up red"></div> >+ </td> >+ <!-- baseline: make sure z-index: 0 works --> >+ <td> >+ <div class="pos z0"> >+ <div class="pos red z1"></div> >+ <div class="up pos red zm1"></div> >+ </div> >+ <div class="up pos green"></div> >+ <div class="up red"></div> >+ </td> >+ <!-- make sure opacity acts like z-index: 0, not auto --> >+ <td> >+ <div class="opc"> >+ <div class="pos red z1"></div> >+ <div class="up pos red zm1"></div> >+ </div> >+ <div class="up pos green"></div> >+ <div class="up red"></div> >+ </td> >+ <!-- make sure z-index does not apply to elements with opacity if they aren't positioned --> >+ <td> >+ <div class="opc z1 red"></div> >+ <div class="up opc red"></div> >+ <div class="up opc z0 red"></div> >+ <div class="up opc zm1 green"></div> >+ </td> >+ <!-- ... but that it does if they are positioned --> >+ <td> >+ <div class="pos opc z1 green"></div> >+ <div class="up pos opc red"></div> >+ <div class="up pos opc z0 red"></div> >+ <div class="up pos opc zm1 red"></div> >+ </td> >+ </tr></table> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-expand-b.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-expand-b.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ebb56573d23193f228db49826327c6b5ffa33e85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-expand-b.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: expansion of #rgb colors to #rrggbb</title> >+ <link rel="author" title="L. David Baron" href="https://dbaron.org/" /> >+ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#rgb-color" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Test that 3-digit #rgb values are expanded into #rrggbb and not #r0g0b0" /> >+ <style type="text/css"><![CDATA[ >+ table { border-spacing: 0; padding: 0; border: none; } >+ td { border: none; padding: 0; width: 1.2em; height: 1.2em; } >+ ]]></style> >+ </head> >+ <body> >+ >+ <p>The left and right cells in each row of the following table should be the <em>same</em> color.</p> >+ >+ <table> >+ <tr><td style="background: #e92"> </td><td style="background: #ee9922"> </td></tr> >+ <tr><td style="background: #fb0"> </td><td style="background: #ffbb00"> </td></tr> >+ <tr><td style="background: #381"> </td><td style="background: #338811"> </td></tr> >+ </table> >+ >+ <p>The left and right cells in each row of the following table should be slightly <em>different</em> colors. The right side should be slightly darker than the left.</p> >+ >+ <table> >+ <tr><td style="background: #e92"> </td><td style="background: #e09020"> </td></tr> >+ <tr><td style="background: #fb0"> </td><td style="background: #f0b000"> </td></tr> >+ <tr><td style="background: #381"> </td><td style="background: #308010"> </td></tr> >+ </table> >+ >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.6-a.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.6-a.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3cfc2a9a32b0be3df0cf44157349edf22cae911c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.6-a.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: rgba() colors</title> >+ <link rel="author" title="L. David Baron" href="https://dbaron.org/" /> >+ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#rgba-color" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#rgb-color" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Opacity of 0.6 makes text partially opaque. Colors are in sRGB color space (may test)." /> >+ <style type="text/css"><![CDATA[ >+ html, body { background: white; color: black; } >+ p { color: black; } >+ #one { color: rgb(102, 102, 102); } >+ #two { color: rgba(0, 0, 0, 0.6); } >+ ]]></style> >+ </head> >+ <body> >+ <p id="one">This text should be the same color (a shade of gray) as the line below.</p> >+ <p id="two">This text should be the same color (a shade of gray) as the line above.</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-basic-a.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-basic-a.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..da302a857ba43abe8b39e2a0a33a589c1e3dd896 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-basic-a.xht >@@ -0,0 +1,21 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: hsla()</title> >+ <link rel="author" title="L. David Baron" href="https://dbaron.org/" /> >+ <link rel="author" title="Mozilla Corporation" href="http://mozilla.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-color/#hsla-color" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Test basic functioning of hsla() colors." /> >+ <style type="text/css"><![CDATA[ >+ html, body { background: white; } >+ p { font-weight: bold; margin: 0; } >+ #one { color: hsla(120, 100%, 70%, 1.0); } >+ #two { color: hsla(120, 100%, 50%, 0.6); } >+ ]]></style> >+ </head> >+ <body> >+ <p id="one">This text should be light green (the same color as the line below).</p> >+ <p id="two">This text should be light green (the same color as the line above).</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/w3c-import.log >index 7404e44cd4999f228c687cb9b913e37545166341..3ce0bcc6d93291126f22942351ac0572429fb388 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-color/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-color/w3c-import.log >@@ -30,6 +30,10 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-003-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-function-parsing.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-hsl.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving-keywords.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/color-resolving.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/currentcolor-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/currentcolor-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/currentcolor-002-expected.html >@@ -121,6 +125,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-007.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgb-rounding-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/rgba-002-expected.html >@@ -143,6 +148,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t31-color-text-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.0-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.0-a.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-0.6-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-1.0-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-basic-1.0-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-clamping-0.0-b-expected.html >@@ -157,6 +163,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-offscreen-multiple-boxes-2-c.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-offscreen-with-alpha-c-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-offscreen-with-alpha-c.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t32-opacity-zorder-c.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t41-html4-keywords-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t41-html4-keywords-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-clip-outside-gamut-b-expected.html >@@ -173,12 +180,14 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex-parsing-f.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-a.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex3-expand-b.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex6-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-hex6-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-values-meaning-b-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t421-rgb-values-meaning-b.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.0-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.0-a.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a0.6-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a1.0-a-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-a1.0-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t422-rgba-clamping-a0.0-b-expected.html >@@ -243,6 +252,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t424-hsl-values-b-8.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t424-hsl-values-b-9-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t424-hsl-values-b-9.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-basic-a.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-clip-outside-device-gamut-b-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-clip-outside-device-gamut-b.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-color/t425-hsla-h-rotating-b-expected.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82321b9c07edaf471f64829f0f0efa232aeb99c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<style> >+/* Disable kerning because kerning may differ for different node tree. */ >+html { font-kerning: none; font-feature-settings: "kern" off; } >+</style> >+<p>You should see the word PASS below.</p> >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c1cd576e3a44e6dd3ce4c15c3d255ed7bb8164e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: Generated ::before and ::after with display:contents inside flex</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="match" href="display-contents-pass-ref.html"> >+<style> >+ /* Disable kerning because kerning may differ for different node tree. */ >+ html { font-kerning: none; font-feature-settings: "kern" off; } >+ .flex { display: inline-flex; flex-direction: column } >+ .flex::before { display: contents; content: "A" } >+ .flex::after { display: contents; content: "S" } >+</style> >+<!-- The before and after pseudo elements do not generate boxes due to >+ display:contents, so that their generated text content constitutes a >+ contiguous sequence of child text runs which means they end up in the same >+ flex item. --> >+<p>You should see the word PASS below.</p> >+P<div class="flex"></div>S >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82321b9c07edaf471f64829f0f0efa232aeb99c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<style> >+/* Disable kerning because kerning may differ for different node tree. */ >+html { font-kerning: none; font-feature-settings: "kern" off; } >+</style> >+<p>You should see the word PASS below.</p> >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a2e90fde67ab9f0f2233c7dac28efb792ff32b70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and HTML button element</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-html"> >+<link rel="match" href="display-contents-pass-ref.html"> >+<style> >+ /* Disable kerning because kerning may differ for different node tree. */ >+ html { font-kerning: none; font-feature-settings: "kern" off; } >+ button { >+ all: initial; >+ font-kerning: none; font-feature-settings: "kern" off; >+ border: 10px solid red; >+ display: contents; >+ } >+</style> >+<p>You should see the word PASS below.</p> >+<button>P<!-- -->A<!-- -->S<!-- -->S</button> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fc078b8150ca50dadfe6693514fd86e2cadfb521 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<details> >+ <div> >+ <summary>summary</summary> >+ details >+ </div> >+</details> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b1cefa6ffde9953c1e7e9c1fb0174db9447c65d8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Test: display: contents under a details element doesn't prevent content from getting suppressed</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="match" href="display-contents-details-001-ref.html"> >+<details> >+ <div style="display:contents"> >+ <summary>summary</summary> >+ details >+ </div> >+</details> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82321b9c07edaf471f64829f0f0efa232aeb99c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<style> >+/* Disable kerning because kerning may differ for different node tree. */ >+html { font-kerning: none; font-feature-settings: "kern" off; } >+</style> >+<p>You should see the word PASS below.</p> >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b6a6540f013924c4534585506400079bddae959e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details.html >@@ -0,0 +1,15 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and HTML details and summary elements</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-html"> >+<link rel="match" href="display-contents-pass-ref.html"> >+<style> >+ details, summary { >+ all: initial; >+ border: 10px solid red; >+ display: contents; >+ } >+</style> >+<p>You should see the word PASS below.</p> >+P<details open><summary>A</summary><span>S</span></details>S >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..38dd74a744d5af37b3e3f87c64d310547192f95f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001-expected.html >@@ -0,0 +1,5 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+P<span>A</span>SS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f35c3cc47b47f01eac3c14429e6254f07374524f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: Dynamic insertion on empty display: contents element with pseudo-elements</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel=match href="display-contents-dynamic-pseudo-insertion-001-ref.html"> >+<style> >+.contents { >+ display: contents; >+ border: 10px solid red; >+} >+.contents::before { >+ content: "A"; >+} >+.contents::after { >+ content: "SS"; >+} >+</style> >+<div class="contents"></div> >+<script> >+document.body.offsetTop; >+let span = document.createElement('span'); >+span.innerHTML = "P"; >+let contents = document.querySelector('.contents'); >+contents.parentNode.insertBefore(span, contents); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82321b9c07edaf471f64829f0f0efa232aeb99c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<style> >+/* Disable kerning because kerning may differ for different node tree. */ >+html { font-kerning: none; font-feature-settings: "kern" off; } >+</style> >+<p>You should see the word PASS below.</p> >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6f547b3201c3b3c2521102ecbcf144df28447f7a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-expected.html >@@ -0,0 +1,6 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> >+<title>CSS Test Reference</title> >+<fieldset style="color: green">P<legend style="padding: 0">legend</legend>ASS</fieldset> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fe2e28b7e41948f0fb4a03efc5d7ef423fe04b34 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<meta charset="utf-8"> >+<link rel="match" href="display-contents-fieldset-nested-legend-ref.html"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#valdef-display-contents"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1427292"> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> >+<title>CSS Test: display: contents on legend</title> >+<style> >+fieldset { >+ color: red; >+} >+.contents { >+ display: contents; >+ color: green; >+ border: 10px solid red; >+} >+</style> >+<fieldset><legend class="contents">P<legend>legend</legend>ASS</legend></fieldset> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f38a3763cfb954966c4eb8527d45a213635ea525 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and HTML fieldset and legend elements</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-html"> >+<link rel="match" href="display-contents-pass-ref.html"> >+<style> >+ /* Disable kerning because kerning may differ for different node tree. */ >+ html { font-kerning: none; font-feature-settings: "kern" off; } >+ fieldset, legend { >+ all: initial; >+ border: 10px solid red; >+ display: contents; >+ } >+</style> >+<p>You should see the word PASS below.</p> >+P<fieldset>A<legend>S</legend>S</fieldset> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9e7349cacd6fd946173f98cd95485e146cbb341d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002-expected.html >@@ -0,0 +1,6 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<p>You should see the word PASS in green and no red below.</p> >+<div style="color:green"><span>P</span>ASS</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8d1d8572ac125ebb6c90c38afdf348d04afab01c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and ::first-letter inheritance</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-pseudo"> >+<link rel="match" href="display-contents-pass-green-no-red-ref.html"> >+<style> >+ div { color: red } >+ div::first-letter { background: transparent /* To trigger first-letter pseudo element */ } >+ span { color: green; display: contents; background-color: red } >+</style> >+<p>You should see the word PASS in green and no red below.</p> >+<div><span>PASS</span></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9e7349cacd6fd946173f98cd95485e146cbb341d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002-expected.html >@@ -0,0 +1,6 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<p>You should see the word PASS in green and no red below.</p> >+<div style="color:green"><span>P</span>ASS</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ae900235a5e9bed2fff278d5ecd2b3a48098a8f1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and ::first-line inheritance</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> >+<link rel="match" href="display-contents-pass-green-no-red-ref.html"> >+<style> >+ span { color: green } >+ .contents { display: contents } >+ #container::first-line { color: red } >+</style> >+<p>You should see the word PASS in green and no red below.</p> >+<div id="container"> >+ <span class="contents">P</span><span>ASS</span> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d06c63f09f4bddc3233608bf333d5650ceaaaee6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height-expected.html >@@ -0,0 +1,9 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<style> >+ span { font-size: 40px; } >+</style> >+<p>The two lines below should not overlap.</p> >+<span>Line 1</span><br><span>Line 2</span> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height.html >new file mode 100644 >index 0000000000000000000000000000000000000000..31fd5a6d479d57a0e6a9c7dba1ad54e59473be51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents font-size should affect line-height</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="match" href="display-contents-line-height-ref.html"> >+<style> >+ span { >+ display: contents; >+ font-size: 40px; >+ } >+</style> >+<p>The two lines below should not overlap.</p> >+<span>Line 1</span><br><span>Line 2</span> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-parsing-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-parsing-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..085d12b103645c60ee4e72b0ffef9a3418cdded2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-parsing-001.html >@@ -0,0 +1,43 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Tests that the 'contents' value for the 'display' property is correctly parsed</title> >+<link rel="help" href="https://drafts.csswg.org/css-display/#box-generation"> >+<link rel="author" href="mailto:ecobos@igalia.com" title="Emilio Cobos Ãlvarez"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ .contents { >+ display: contents; >+ } >+ >+ .contents-then-block { >+ display: contents; >+ display: block; >+ } >+ >+ .content { >+ display: content; >+ } >+</style> >+<div class="contents" id="contentsElement"></div> >+<div class="content" id="bogusContentsElement"></div> >+<div class="contents-then-block" id="contentsThenBlockElement"></div> >+<script> >+test(function() { >+ var contentsElement = document.getElementById("contentsElement"); >+ var bogusContentsElement = document.getElementById("bogusContentsElement"); >+ var contentsThenBlockElement = document.getElementById("contentsThenBlockElement"); >+ >+ assert_equals(getComputedStyle(contentsElement).getPropertyValue("display"), "contents"); >+ assert_equals(getComputedStyle(bogusContentsElement).getPropertyValue("display"), "block"); >+ assert_equals(getComputedStyle(contentsThenBlockElement).getPropertyValue("display"), "block"); >+ >+ var element = document.createElement("div"); >+ document.body.appendChild(element); >+ assert_equals(getComputedStyle(element).getPropertyValue("display"), "block"); >+ element.style.display = "contents"; >+ assert_equals(getComputedStyle(element).getPropertyValue("display"), "contents"); >+ element.style.display = "block"; >+ assert_equals(getComputedStyle(element).getPropertyValue("display"), "block"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..07a5663748b7b8d9a90344df809f2c07b6dbf35d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001-expected.html >@@ -0,0 +1,5 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<p>Test passes if you see nothing below.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5007e1f57d35538bf43f7ccc616d53bddafb20c7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Test: display: contents unboxing works in presence of dynamic changes to the tree.</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#unbox"> >+<link rel="match" href="display-contents-suppression-dynamic-001-ref.html"> >+<p>Test passes if you see nothing below.</p> >+<textarea style="display: contents"> >+ FAIL >+</textarea> >+<script> >+ let textarea = document.querySelector("textarea"); >+ textarea.offsetTop; >+ textarea.appendChild(document.createTextNode("FAIL")); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-anchor-child.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-anchor-child.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d0119d7fff3d2dcb833136eacd6654394f9f737f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-anchor-child.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents on SVG anchor child</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-svg"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<svg> >+ <a> >+ <tspan style="display:contents;color:green">Text</tspan> >+ </a> >+ <text> >+ <a> >+ <tspan style="display:contents;color:green">Text</tspan> >+ </a> >+ </text> >+</svg> >+<script> >+ test(() => {}, "Loading this page should not cause a crash."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b691e0e80edf02dc8fe139763580107f1cd013e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<p>You should see the word PASS below.</p> >+<div style="font: 16px monospace"> >+ <svg> >+ <text x="0" y="20">P</text> >+ <text x="10" y="20">A</text> >+ <text x="20" y="20">S</text> >+ <text x="30" y="20">S</text> >+ </svg> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7ccc92f72070bc4646c83d731d4d62816d6715ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and SVG elements</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-svg"> >+<link rel="match" href="display-contents-svg-elements-ref.html"> >+<p>You should see the word PASS below.</p> >+<div style="font: 16px monospace"> >+ <svg> >+ <defs><text x="20" y="20" id="S">S</text></defs> >+ <text y="40" style="display:contents">FAIL</text> >+ <svg style="display:contents;opacity:0"> >+ <text x="0" y="20">P</text> >+ </svg> >+ <g style="display:contents;opacity:0"> >+ <text x="10" y="20"><tspan dx="2000" style="display:contents;opacity:0">A</tspan></text> >+ </g> >+ <use xlink:href="#S" style="display:contents;opacity:0"></use> >+ <text x="30" y="20">S</text> >+ </svg> >+ <svg style="display:contents"><text y="40">FAIL</text></svg> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-switch-child.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-switch-child.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7befdb415b65da2204f4f721c1e270d2169eb00d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-switch-child.html >@@ -0,0 +1,15 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents on SVG switch child</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-svg"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<svg> >+ <switch> >+ <tspan style="display:contents;color:green">Text</tspan> >+ </switch> >+</svg> >+<script> >+ test(() => {}, "Loading this page should not cause a crash."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..163efd401c4d24ce205dc9c39431b79598a7fb6f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002-expected.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<p>The words "Two" and "lines" should not be on the same line.</p> >+Two<br> >+lines >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..51bf96846c7d432f5393ccfb0a1e29be52fcdd9f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: Apply white-space property of display:contents element to inline children</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="match" href="display-contents-text-inherit-ref.html"> >+<p>The words "Two" and "lines" should not be on the same line.</p> >+<div id="div" style="background-color:red"> >+ <span style="display:contents;white-space:pre-line">Two >+ lines >+ </span> >+</div> >+<script> >+ document.body.offsetTop; >+ div.style.backgroundColor = "transparent"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..163efd401c4d24ce205dc9c39431b79598a7fb6f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-expected.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<p>The words "Two" and "lines" should not be on the same line.</p> >+Two<br> >+lines >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b7e769cd69f9eccf3ca898fed013a8be8f362c31 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit.html >@@ -0,0 +1,15 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: Apply display:contents text properties to text children</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents"> >+<link rel="match" href="display-contents-text-inherit-ref.html"> >+<style> >+ div { >+ display: contents; >+ white-space: pre; >+ } >+</style> >+<p>The words "Two" and "lines" should not be on the same line.</p> >+<div>Two >+lines</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82321b9c07edaf471f64829f0f0efa232aeb99c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Reftest Reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<style> >+/* Disable kerning because kerning may differ for different node tree. */ >+html { font-kerning: none; font-feature-settings: "kern" off; } >+</style> >+<p>You should see the word PASS below.</p> >+PASS >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none.html >new file mode 100644 >index 0000000000000000000000000000000000000000..53f5f9e5c7f447bc87cc1ee460323b93df2cdc68 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: display:contents and unusual HTML elements as display:none</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display/#unbox-html"> >+<link rel="match" href="display-contents-pass-ref.html"> >+<style> >+ /* Disable kerning because kerning may differ for different node tree. */ >+ html { font-kerning: none; font-feature-settings: "kern" off; } >+ body { overflow: hidden } >+ br, wbr, meter, progress, canvas, embed, object, audio, iframe, img, video, >+ input, textarea, select { >+ display: contents; >+ border: 10px solid red; >+ width: 200px; height: 200px; >+ } >+</style> >+<p>You should see the word PASS below.</p> >+<div> >+ <meter></meter> >+ <progress></progress> >+ <canvas></canvas> >+ <embed> >+ <object>FAIL</object> >+ <audio controls></audio> >+ <iframe></iframe> >+ <img> >+ <video></video> >+ <input></input> >+ <textarea></textarea> >+ <select></select> >+</div> >+P<br>A<wbr>S<br>S >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-list-item-height-after-dom-change.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-list-item-height-after-dom-change.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f8d6e85cee2325f3ae51a950a276430d26c04189 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-list-item-height-after-dom-change.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Display: reflowing a display:list-item on dom changes - non-zero height</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-display-3/#list-items"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<ul> >+ <li id="item" style="background:green"> >+ <div id="content" style="overflow:hidden">Text<div> >+ </li> >+</ul> >+<script> >+ test(function() { >+ document.body.offsetTop; // force layout >+ item.insertBefore(document.createTextNode("This text should have a green background"), item.firstChild); >+ content.innerHTML = ""; >+ assert_not_equals(item.clientHeight, 0, "The height of the LI should not be 0px."); >+ }, "List item height after DOM change."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..675c2c214b51d192ff4b9e8e069fd2f7b30ffea3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/OWNERS >@@ -0,0 +1 @@ >+@bert-github >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/after-content-display-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/after-content-display-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..fbcd4e8c265dafda4fccd41b67ff9dcbdbbd2771 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/after-content-display-004.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <head> >+ >+ <title>CSS Test: :after generated content - display run-in</title> >+ >+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#before-after-content" title="12.1 The :before and :after pseudo-elements" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-box/#run-in-boxes" title="4.3. Run-in boxes" /> >+ >+ <meta content="" name="flags" /> >+ <meta content="Generated content can have their own display value explicitly set in which case they behave as if they were real elements inserted just inside their associated element." name="assert" /> >+ >+ <style type="text/css"><![CDATA[ >+ div:after >+ { >+ content: "Filler text"; >+ display: run-in; >+ } >+ ]]></style> >+ >+ </head> >+ >+ <body> >+ >+ <p>Test passes if there are <strong>2 lines of "Filler text"</strong>.</p> >+ >+ <div>Filler text</div> >+ >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/anonymous-box-generation-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/anonymous-box-generation-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0a462a93109e57b5cacced53352d87280745540b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/anonymous-box-generation-002.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Anonymous run-in box generation</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Block boxes with inline content followed by a run-in box generate an anonymous run-in box around the inline content." /> >+ <style type="text/css"> >+ div >+ { >+ width: 2in; >+ } >+ #div1 >+ { >+ text-align: center; >+ } >+ div div >+ { >+ background: blue; >+ display: run-in; >+ height: 1em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" text is centered above the blue box.</p> >+ <div id="div1"> >+ Filler Text >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b06a5f537c8805b08fc057c6a9d1ba3f58a352f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'background' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a black box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-attachment-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-attachment-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9f2c78913bbdeddaf2eb5f49500be283be55700e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-attachment-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background-attachment applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background-attachment" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="image" /> >+ <meta name="assert" content="The 'background-attachment' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background-color: orange; >+ background-image: url('support/blue96x96.png'); >+ background-attachment: fixed; >+ background-repeat: repeat-x; >+ display: run-in; >+ height: 2in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a short blue box above a taller orange box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d2bd6e098a54792770d108bad353a32caf5ca095 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-color-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background-color applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'background-color' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background-color: black; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the box below is black.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-image-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-image-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..84ade797600282ae229980fe7aa3bb87c19788fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-image-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background-image applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background-image" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="image" /> >+ <meta name="assert" content="The 'background-image' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background-image: url('support/black15x15.png'); >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-position-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-position-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..33b3cb8c16fee95a0e3912b693aede7fbb8d5f9a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-position-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background-position applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background-position" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="image" /> >+ <meta name="assert" content="The 'background-position' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background-image: url('support/blue15x15.png'); >+ background-position: bottom right; >+ background-repeat: no-repeat; >+ border: solid black; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the blue box is in the lower-right corner of the black box.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-repeat-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-repeat-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..236b30a5ad6461c876def5a5a0aeb4131bf85f09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-repeat-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Background-repeat applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-background-repeat" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties" /> >+ <meta name="flags" content="image" /> >+ <meta name="assert" content="The 'background-repeat' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background-color: red; >+ background-image: url('support/green15x15.png'); >+ background-repeat: repeat; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green box below and no red visible on the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/before-content-display-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/before-content-display-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..708df1d4ff87dae1b750a47b9f9fffea242e7407 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/before-content-display-004.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <head> >+ >+ <title>CSS Test: :before generated content - display run-in</title> >+ >+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#before-after-content" title="12.1 The :before and :after pseudo-elements" /> >+ <link rel="help" href="http://www.w3.org/TR/css3-box/#run-in-boxes" title="4.3. Run-in boxes" /> >+ >+ <meta content="" name="flags" /> >+ <meta content="Generated content can have their own display value explicitly set in which case they behave as if they were real elements inserted just inside their associated element." name="assert" /> >+ >+ <style type="text/css"><![CDATA[ >+ div:before >+ { >+ content: "Filler text "; >+ display: run-in; >+ } >+ ]]></style> >+ >+ </head> >+ >+ <body> >+ >+ <p>Test passes if the 2 "Filler text" are both <strong>on the same line</strong>.</p> >+ >+ <div>Filler text</div> >+ >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2f54995f7b66c2eaed0b139a9d5b31da2a117394 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-shorthand-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border: solid green; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a hollow box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6585584f98d0ab67420efab7911ac3fb221b9165 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-bottom applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-bottom" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-shorthand-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-bottom' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-bottom: solid green; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green line below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f68213dabedeab1824d885163edd02ebc47aafe0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-color-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-bottom-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-bottom-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-color-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-bottom-color' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-bottom-style: solid; >+ border-bottom-color: green; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is green.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..13f2aae3aa0f6d63eb773a16ef5cf10549675b39 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-style-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-bottom-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-bottom-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-style-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-bottom-style' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-bottom-style: dashed; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is dashed.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6fed0f8359d8b2a3873b516a6da8c7b82ef7e1cb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-width-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-bottom-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-bottom-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-width-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-bottom-width' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-bottom-style: solid; >+ border-bottom-width: 1in; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-collapse-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-collapse-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..67866148220fcdda923330e452a4e67f6a162869 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-collapse-applies-to-004.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-collapse and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#propdef-border-collapse" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#borders" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Border-collapse does not apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ border-collapse: collapse; >+ display: run-in; >+ height: 100px; >+ width: 100px; >+ } >+ #top >+ { >+ border-bottom: 10px solid blue; >+ } >+ #bottom >+ { >+ border-top: 10px dotted orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if below there is a horizontal solid blue line above a dotted orange line.</p> >+ <div id="top"></div> >+ <div id="bottom"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3524867b3439a0423fc471397b56ad1ea64eaa9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-color-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-color-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-color' properties applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-style: solid; >+ border-color: green; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e6102ba8ff133c5a28e75ab2ad4fb4ac272c2d37 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-left applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-left" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-shorthand-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-left' properties applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-left: solid green; >+ display: run-in; >+ height: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green line below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6365a605729f86939230c8e1877d2502c5fc4d30 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-color-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-left-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-left-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-color-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-left-color' properties applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-left-style: solid; >+ border-left-color: green; >+ display: run-in; >+ height: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is green.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..eaf30a45ea215ad001e74c9f2e7c08bebdc1e037 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-style-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-left-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-left-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-style-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-left-style' properties applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-left-style: dashed; >+ display: run-in; >+ height: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is dashed.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6efb1b1a999b24911afa7a5012ab36ca06d60436 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-width-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-left-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-left-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-width-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-left-width' properties applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-left-style: solid; >+ border-left-width: 1in; >+ display: run-in; >+ height: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1bcd8ee4b8975eb6da469a9d60a560a809d828f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-right applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-right" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-shorthand-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-right' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-right: solid green; >+ display: run-in; >+ height: 1in; >+ width: 0; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green line below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..19cac09e10b2e944657c454872ec03bf289db54e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-color-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-right-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-right-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-color-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-right-color' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-right-style: solid; >+ border-right-color: green; >+ display: run-in; >+ height: 1in; >+ width: 0; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is green.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bf2b6d3241071fc5b0b405a2c1aeee0bf381473d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-style-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-right-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-right-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-style-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-right-style' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-right-style: dashed; >+ display: run-in; >+ height: 1in; >+ width: 0; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is dashed.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..78595a8f876ad06aa0678397f678ba6eb694227e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-width-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-right-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-right-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-width-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-right-width' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-right-style: solid; >+ border-right-width: 1in; >+ display: run-in; >+ height: 1in; >+ width: 0; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-spacing-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-spacing-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..da6bb3b5d86a4a03dd3fe133be9db782817bcfec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-spacing-applies-to-004.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-spacing and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#propdef-border-spacing" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#separated-borders" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Border-spacing does not apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ border: 10px solid black; >+ border-spacing: 20px; >+ display: run-in; >+ height: 100px; >+ width: 100px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the two boxes below are adjoining.</p> >+ <div></div> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a7f62b23381f7aeeec38f860f2e3801ac76c2ea0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-style-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-style-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-style' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-style: dashed; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a dashed lined box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8e5b6a67c0df869f8ef859289bbfa4d81a874185 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-top applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-top" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-shorthand-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-top' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-top: solid green; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green line below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b3fcb42df890bddef838c96a51fa83468559205d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-color-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-top-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-top-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-color-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-top-color' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-top-style: solid; >+ border-top-color: green; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is green.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1716cca1e0aeaf1d17e1e3adb8b7e113f4980f10 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-style-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-top-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-top-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-style-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-top-style' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-top-style: dashed; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the line below is dashed.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8ec95ca4fcc7adf8dee315519cc2433ee9dcc5c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-width-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-top-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-top-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-width-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-top-width' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-top-style: solid; >+ border-top-width: 1in; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f9431b1ccb4200b6cabf80cd4c1904ba18b709dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-width-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Border-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-border-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#border-width-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'border-width' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ border-style: solid; >+ border-width: 1in; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box below with four sides that are the same width. (Note: this will make a large square surrounding a smaller white square.)</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/bottom-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/bottom-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b7e78eeed1e90aae0dda3dce15308dfd862f8935 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/bottom-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Bottom applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-bottom" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#position-props" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'bottom' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ bottom: 0; >+ display: run-in; >+ height: 1in; >+ position: absolute; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box at the bottom of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/caption-side-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/caption-side-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f725df6e83716a162e0e13957c9ead8ca4c57902 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/caption-side-applies-to-004.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Caption-side and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#propdef-caption-side" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#caption-position" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Caption-side does not apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ span >+ { >+ background: blue; >+ caption-side: bottom; >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there are three lines of "Filler Text" below and the middle line has a blue background.</p> >+ <div> >+ Filler Text >+ <span>Filler Text</span> >+ Filler Text >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e64864ab8807e7ef0a014456da82b2c797c5ad1c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-applies-to-011.xht >@@ -0,0 +1,29 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Clear applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-clear" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#flow-control" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'clear' property applies to elements with a display of 'run-in'." /> >+ <style type="text/css"> >+ p >+ { >+ float: left; >+ } >+ div >+ { >+ background: green; >+ display: run-in; >+ clear: both; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-runin-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-runin-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4bc1165024cf0b990c2e5cb9bd02a88922db1727 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-runin-001.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Clear applies to final block box of a run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#flow-control" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Clearance only applies to the final block box of a run-in element." /> >+ <style type="text/css"> >+ #div1 >+ { >+ width: 4in; >+ } >+ #span1 >+ { >+ background-color: blue; >+ float: left; >+ height: 1in; >+ width: 1in; >+ } >+ #span2 >+ { >+ clear: left; >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" is all on the same line and is below the blue box.</p> >+ <div id="div1"> >+ <span id="span1"></span> >+ <span id="span2">Filler Text </span> >+ <div>Filler Text</div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..373de932ecdc7e054f56abc969198695ad4a669d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/color-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Color applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#propdef-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#colors" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'color' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ color: green; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is green.</p> >+ <div>Filler Text</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..77f04bd7488501a831180771b5fa6b24f78b7481 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011-expected.xht >@@ -0,0 +1,12 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" >+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - pass if there is a number 5 below</title> >+ <link rel="author" title="Opera" href="https://www.opera.com/"/> >+</head> >+<body> >+ <p>Test passes if there is a number '5' below.</p> >+ <div>5</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4bf9e1233fa24962c9fe01cde6eeba00c4306efe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Counter-increment applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-counter-increment" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#counters" /> >+ <link rel="match" href="../../reference/pass_if_number_5.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'counter-increment' property applies to elements with a 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ counter-increment: test 5; >+ display: run-in; >+ } >+ div:before >+ { >+ content: counter(test); >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a number '5' below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..77f04bd7488501a831180771b5fa6b24f78b7481 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011-expected.xht >@@ -0,0 +1,12 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" >+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - pass if there is a number 5 below</title> >+ <link rel="author" title="Opera" href="https://www.opera.com/"/> >+</head> >+<body> >+ <p>Test passes if there is a number '5' below.</p> >+ <div>5</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..75a54c93086f7c0e7800d4db36d8648dbd3e0da9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Counter-reset applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-counter-reset" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#counters" /> >+ <link rel="match" href="../../reference/pass_if_number_5.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'counter-reset' property applies to elements with a 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ counter-reset: test 5; >+ display: run-in; >+ } >+ div:before >+ { >+ content: counter(test); >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a number '5' below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/cursor-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/cursor-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d4ed8d2d0c65630be8b89fbebbdb925811f61097 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/cursor-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Cursor applied to element with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#propdef-cursor" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#cursor-props" /> >+ <meta name="flags" content="interact" /> >+ <meta name="assert" content="The 'cursor' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background-color: blue; >+ cursor: pointer; >+ height: 1in; >+ display: run-in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the cursor changes to a pointer cursor when it is over the blue area.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/direction-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/direction-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a5335efefe9d67ee215031bf60c875028a075dcb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/direction-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Direction applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-direction" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#direction" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'direction' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: orange; >+ direction: rtl; >+ display: run-in; >+ font: 0.5in/1em Ahem; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box in the upper-right corner of the orange box.</p> >+ <div>X</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/display-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/display-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..244c08c392f3526089dd8eb02d25a338012a0e10 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/display-004.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Display set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The property 'display' set to 'run-in' behaves in layout as a run-in block." /> >+ <style type="text/css"> >+ #test >+ { >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is all on the same line.</p> >+ <div id="test">Filler Text</div> >+ <div>Filler Text</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/empty-cells-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/empty-cells-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..eab1b055d0df295dfe9beca075602f10965a223c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/empty-cells-applies-to-004.xht >@@ -0,0 +1,48 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Empty-cells and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#propdef-empty-cells" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#empty-cells" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Empty-cells does not apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ #table >+ { >+ display: table; >+ } >+ .tr >+ { >+ display: table-row; >+ } >+ .td >+ { >+ color: white; >+ display: table-cell; >+ } >+ #test >+ { >+ background: black; >+ border: 5px solid black; >+ display: run-in; >+ empty-cells: hide; >+ height: 1em; >+ width: 1em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box below.</p> >+ <div id="table"> >+ <div class="tr"> >+ <div id="test"></div> >+ <div class="td">XXXXX</div> >+ </div> >+ <div class="tr"> >+ <div class="td">XXXXX</div> >+ <div class="td">XXXXX</div> >+ </div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/first-line-pseudo-009.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/first-line-pseudo-009.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..690aee9f85c5ece9ca6e3b267020835bb3876836 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/first-line-pseudo-009.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> >+ <head> >+ <title>CSS Test: CSS Block Box Model: first-line and inherited backgrounds</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/box/block/first-line/009.html" type="text/html"/> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-line-pseudo" /> >+ <style type="text/css"> >+ /* layout */ >+ .test { border: solid; margin: 1em; } >+ /* test */ >+ .runin { display: run-in; background: navy; color: yellow; } >+ .block { display: block; background: purple; color: white; } >+ .block:first-line { background: inherit; color: inherit; font-weight: bold; } >+ /* control */ >+ .fakerunin { display: inline; background: navy; color: yellow; font-weight: bold; } >+ .fakeblock { display: block; background: purple; color: white; font-weight: bold; } >+ </style> >+ </head> >+ <body> >+ <p>The following two lines should look identical (this test also tests run-in).</p> >+ <div class="test"> <div class="runin"> ABC </div> <div class="block"> DEF </div> </div> >+ <div class="test"> <div class="fakeblock"> <div class="fakerunin"> ABC </div> DEF </div> </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/float-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/float-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9cd9bd990af0085a3bd980ff8326a311d8d01935 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/float-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Float applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-float" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#float-position" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'float' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ display: run-in; >+ float: right; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box on the right side of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c0ac0626841290152b138e7c4e4a7c78c72da3a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-applies-to-004.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-shorthand" /> >+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-prop"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'font' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font: italic small-caps bold 16px sans-serif; >+ } >+ #div1 >+ { >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the lines of "Filler Text" below match.</p> >+ <div>Filler Text</div> >+ <div id="div1">Filler Text</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-family-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-family-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3abb6579e5b8bcfbf6d6606a716f87c5554c7fe6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-family-applies-to-004.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font-family and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-family" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-family-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'font-family' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ font-family: Ahem; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div>X</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-size-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-size-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..487a371307b59d4f52399fee556e447fb3d22d23 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-size-applies-to-004.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font-size and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-size" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-size-props" /> >+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-size-prop"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'font-size' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ #div1 >+ { >+ background: orange; >+ height: 1in; >+ width: 1in; >+ } >+ #div2 >+ { >+ display: run-in; >+ font-family: Ahem; >+ font-size: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the boxes below are the same size.</p> >+ <div id="div1"></div> >+ <div id="div2">X</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3d1c7fd0347967e5fb14752bd17068faa38b28e0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - pass if Filler Text slanted to one side</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"/> >+ <link rel="author" title="Geoffrey Sneddon" href="mailto:me@gsnedders.com"/> >+ <style> >+ div { >+ font-style: italic; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if the "Filler Text" below is slanted to one side.</p> >+ <div>Filler Text</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7e9024362ead9ee9e19e402407efe7d56a95ff1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font-style and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-styling" /> >+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-style-prop"/> >+ <link rel="match" href="../../reference/pass_if_filler_text_slanted.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'font-style' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ font-style: italic; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is slanted to one side.</p> >+ <div>Filler Text</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..70bd3b4e92af32ca6efd3cca7d0922afb65b12f1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004-expected.xht >@@ -0,0 +1,18 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - pass if the lines of Filler Text below match, small-caps</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"/> >+ <link rel="mismatch" href="pass_if_filler_text_match.xht"/> >+ <style type="text/css"> >+ div { >+ font-variant: small-caps; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if the lines of "Filler Text" below match.</p> >+ <div>Filler Text</div> >+ <div>Filler Text</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..15a72afb0e50ccca5029840a23a640a9c233a6e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004.xht >@@ -0,0 +1,28 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font-variant and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-variant" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#small-caps" /> >+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-variant-prop" /> >+ <link rel="match" href="../../reference/pass_if_filler_text_match_smallcaps.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'font-variant' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font-variant: small-caps; >+ } >+ #div1 >+ { >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the lines of "Filler Text" below match.</p> >+ <div>Filler Text</div> >+ <div id="div1">Filler Text</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0fc27bcacd8306fbd4d636e9dd34fcab8c1b51b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004-expected.xht >@@ -0,0 +1,18 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - pass if the lines of Filler Text below match, bold</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"/> >+ <link rel="mismatch" href="pass_if_filler_text_match.xht"/> >+ <style type="text/css"> >+ div { >+ font-weight: bold; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if the lines of "Filler Text" below match.</p> >+ <div>Filler Text</div> >+ <div>Filler Text</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..be108161d1558b9f4f8edd322cacc4f1cf24c3d8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004.xht >@@ -0,0 +1,28 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Font-weight and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/fonts.html#font-boldness" /> >+ <link rel="help" href="http://www.w3.org/TR/css-fonts-3/#font-weight-prop" /> >+ <link rel="match" href="../../reference/pass_if_filler_text_match_bold.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Font weights apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font-weight: bold; >+ } >+ #div1 >+ { >+ display: run-in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the lines of "Filler Text" below match.</p> >+ <div>Filler Text</div> >+ <div id="div1">Filler Text</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..084f4328536ed068f5cc9ce69588f3275f7c17d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Height applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-height" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#the-height-property" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'height' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/left-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/left-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..de6eae360e509244d07d71c2735cadfa644a1701 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/left-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Left applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-left" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#position-props" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'left' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ left: 0; >+ display: run-in; >+ height: 1in; >+ position: absolute; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box on the left side of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..57719bba9b40dc73629cc3715a1d3d13e89233e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004-expected.html >@@ -0,0 +1,23 @@ >+<!doctype html> >+<html> >+<head> >+ <title>Reference rendering - black box ends when blue box ends, 6 black boxes (ahem)</title> >+ <link rel="author" title="Opera" href="https://www.opera.com/"> >+ <style type="text/css"> >+ #black { >+ font: 16px/1 "Ahem"; >+ } >+ #blue { >+ height: 16px; >+ width: 176px; >+ background: blue; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there are six black boxes below and the last black box >+ ends when the blue box ends.</p> >+ <div id="black">X X X X X X</div> >+ <div id="blue"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..051a2d8451c61e160e03e108d916450fd0c3d397 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Letter-spacing application on a 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-letter-spacing" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#spacing-props" /> >+ <link rel="match" href="../../reference/black_box_ends_when_blue_box_ends_6_boxes_ahem.html"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'letter-spacing' property is applied to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font: 16px/1em Ahem; >+ } >+ div div >+ { >+ display: run-in; >+ letter-spacing: 1em; >+ } >+ #div1 >+ { >+ background: blue; >+ height: 1em; >+ width: 11em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there are six black boxes below and the last black box ends when the blue box ends.</p> >+ <div> >+ <div>XXXXXX</div> >+ </div> >+ <div id="div1"></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/line-height-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/line-height-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2a1cf98b41c3a327039c48dc5e1e1ea09b077cd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/line-height-applies-to-011.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Line-height applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-line-height" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'line-height' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ #div1 >+ { >+ position: relative; >+ } >+ #div2 >+ { >+ background: blue; >+ display: run-in; >+ line-height: 2in; >+ width: 1in; >+ } >+ #div3 >+ { >+ background: orange; >+ height: 2in; >+ left: 1in; >+ position: absolute; >+ top: 0; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the blue and orange boxes below are the same height.</p> >+ <div id="div1"> >+ <div id="div2"> </div> >+ <div id="div3"></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bafbe908ab45203a872da0ded812988a835fe807 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011-expected.xht >@@ -0,0 +1,18 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - single square below, list marker, 96px left offset</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"/> >+ <style type="text/css"> >+ div { >+ display: list-item; >+ list-style: square; >+ margin-left: 96px; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a single square below.</p> >+ <div> </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f56f5e24a41b6cc68b130098ec901abe3383ea71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: List-style applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" /> >+ <link rel="match" href="../../reference/single_square_list_marker.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'list-style' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ list-style: square; >+ margin-left: 1in; >+ } >+ span >+ { >+ display: list-item; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a single square below.</p> >+ <div> >+ <span></span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-image-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-image-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..dca032c6e9e9b86e74eaffdccdcf43c830c7d630 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-image-applies-to-011.xht >@@ -0,0 +1,29 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: List-style-image applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" /> >+ <meta name="flags" content="image" /> >+ <meta name="assert" content="The 'list-style-image' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ list-style-image: url('support/blue15x15.png'); >+ margin-left: 1in; >+ } >+ span >+ { >+ display: list-item; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a single blue square below.</p> >+ <div> >+ <span></span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-position-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-position-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..95117c2c3b7198b997c0b84c8b129d995657e0ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-position-applies-to-011.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: List-style-position applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-position" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'list-style-position' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ list-style-position: inside; >+ margin-left: 1in; >+ } >+ span >+ { >+ background: orange; >+ display: list-item; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a black dot inside an orange box below.</p> >+ <div> >+ <span></span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bafbe908ab45203a872da0ded812988a835fe807 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011-expected.xht >@@ -0,0 +1,18 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+ <title>Reference rendering - single square below, list marker, 96px left offset</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"/> >+ <style type="text/css"> >+ div { >+ display: list-item; >+ list-style: square; >+ margin-left: 96px; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a single square below.</p> >+ <div> </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..110a0acf30421e124206b9ad502c61a2cf8c3bbb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: List-style-type applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-list-style-type" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#list-style" /> >+ <link rel="match" href="../../reference/single_square_list_marker.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'list-style-type' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ list-style-type: square; >+ margin-left: 1in; >+ } >+ span >+ { >+ display: list-item; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a single square below.</p> >+ <div> >+ <span></span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6646d1cda45218b1fa0cedb73197725ca9498a19 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-applies-to-011.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Margin applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-margin" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#margin-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'Margin' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ #wrapper >+ { >+ border: 10px solid blue; >+ position: absolute; >+ } >+ #test >+ { >+ border: 10px solid orange; >+ display: run-in; >+ height: 200px; >+ width: 200px; >+ margin: 50px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="wrapper"> >+ <div id="test"></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-bottom-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-bottom-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..20f4c6927d963d1f93435f7216d92c21d87bede5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-bottom-applies-to-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Margin-bottom applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-margin-bottom" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#margin-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'margin-bottom' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ #wrapper >+ { >+ border-bottom: 10px solid blue; >+ } >+ div div >+ { >+ border-bottom: 10px solid orange; >+ display: run-in; >+ height: 200px; >+ margin-bottom: 50px; >+ width: 200px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="wrapper"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-left-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-left-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..37ffdd33755e0ac0b2e0df64d240cc2b901f8426 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-left-applies-to-011.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Margin-left applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-margin-left" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#margin-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'margin-left' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 200px; >+ width: 200px; >+ } >+ #div1 >+ { >+ border-left: 10px solid blue; >+ } >+ div div >+ { >+ border-left: 10px solid orange; >+ display: run-in; >+ margin-left: 50px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-right-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-right-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4bee27c0d23432e1282f29730a537b0e84678da6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-right-applies-to-011.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Margin-right applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-margin-right" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#margin-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'margin-right' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 200px; >+ } >+ #div1 >+ { >+ border-right: 10px solid blue; >+ width: 200px; >+ } >+ div div >+ { >+ border-right: 10px solid orange; >+ display: run-in; >+ margin-right: 50px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-top-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-top-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..762e34be0a2c5c842bb1881c0bfdba6b868dca0a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-top-applies-to-011.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Margin-top applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-margin-top" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#margin-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'margin-top' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 200px; >+ width: 200px; >+ } >+ #div1 >+ { >+ border-top: 10px solid blue; >+ } >+ div div >+ { >+ border-top: 10px solid orange; >+ display: run-in; >+ margin-top: 50px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0145ecf186f7e7d644b60d0652562930db4df192 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Max-height applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-max-height" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'max-height' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ height: 3in; >+ max-height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..089fea0d68f003d354235c50a7df4c79898ae5cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Max-width applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-max-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-widths" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'max-width' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ height: 1in; >+ max-width: 1in; >+ width: 3in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8d0f0f2134b27178a602b044d731ccd77c029395 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Min-height applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-height" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-heights" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'min-height' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ min-height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2443442d47d2b0c8d3c1d113881534b125c85208 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Min-width applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-min-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#min-max-widths" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'min-width' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ #div1 >+ { >+ width: 0.5in; >+ } >+ div div >+ { >+ background: black; >+ display: run-in; >+ height: 1in; >+ min-width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c72f7105326c19acb543988487946f75a9f1bda7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-applies-to-011.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Outline applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#propdef-outline" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#dynamic-outlines" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'outline' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ height: 1in; >+ outline: solid blue 10px; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a blue box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-color-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-color-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6861863c12e2fe7efc434698be81110a0ba30d94 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-color-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Outline-color applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#propdef-outline-color" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#dynamic-outlines" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'outline-color' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 1in; >+ display: run-in; >+ outline-color: blue; >+ outline-style: solid; >+ outline-width: 10px; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the box below is blue.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-style-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-style-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a3d36b28532bf2579c344e00361da2e5981ae313 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-style-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Outline-style applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#propdef-outline-style" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#dynamic-outlines" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'outline-style' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ height: 1in; >+ outline-color: blue; >+ outline-style: dotted; >+ outline-width: 10px; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the box below has a dotted border.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6510ed026113261d6c4b9321f08924457366f2e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-width-applies-to-011.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Outline-width applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#propdef-outline-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/ui.html#dynamic-outlines" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'outline-width' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ height: 1in; >+ outline-color: green; >+ outline-style: solid; >+ outline-width: 10px; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a green box below.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/overflow-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/overflow-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..28d7d50effafcfea71d1900996f78267dae62fb0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/overflow-applies-to-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: overflow applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#propdef-overflow" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#overflow" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'overflow' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ border: 5px solid transparent; >+ color: white; >+ display: run-in; >+ font: 20px/1em Ahem; >+ height: 5em; >+ overflow: hidden; >+ width: 5em; >+ } >+ #span2 >+ { >+ color: red; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is no red visible on the page.</p> >+ <div><span>XXXXX</span><span id="span2">XXXXX</span></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8c2a9d8d0864cda18eee02c7db51ca6568251754 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-applies-to-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Padding applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-padding" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#padding-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'padding' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ #div1 >+ { >+ border: 10px solid blue; >+ display: run-in; >+ padding: 50px; >+ width: 200px; >+ } >+ div div >+ { >+ border: 10px solid orange; >+ height: 200px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines on all four sides.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-bottom-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-bottom-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..65a377c993743969ecb14877269159edccb4e875 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-bottom-applies-to-011.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Padding-bottom applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-padding-bottom" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#padding-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'padding-bottom' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ width: 200px; >+ } >+ #div1 >+ { >+ border-bottom: 10px solid blue; >+ display: run-in; >+ padding-bottom: 50px; >+ } >+ div div >+ { >+ border-bottom: 10px solid orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-left-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-left-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..68c25d6fa8b90c148d2df07406ba6b40702ad126 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-left-applies-to-011.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Padding-left applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-padding-left" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#padding-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'padding-left' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 200px; >+ width: 200px; >+ } >+ #div1 >+ { >+ border-left: 10px solid blue; >+ display: run-in; >+ padding-left: 50px; >+ } >+ div div >+ { >+ border-left: 10px solid orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-right-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-right-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a09e69329d41ecdcb21668529b24e005eed63619 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-right-applies-to-011.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Padding-right applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-padding-right" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#padding-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'padding-right' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ height: 200px; >+ } >+ #div1 >+ { >+ border-right: 10px solid blue; >+ display: run-in; >+ padding-right: 50px; >+ width: 200px; >+ } >+ div div >+ { >+ border-right: 10px solid orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-top-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-top-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9f2bb3628c2e704e7ebb54ad6e4bad2b65416700 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-top-applies-to-011.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Padding-top applied to element with display run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#propdef-padding-top" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/box.html#padding-properties" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'padding-top' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ width: 200px; >+ } >+ #div1 >+ { >+ border-top: 10px solid blue; >+ display: run-in; >+ padding-top: 50px; >+ } >+ div div >+ { >+ border-top: 10px solid orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is space between the blue and orange lines below.</p> >+ <div id="div1"> >+ <div></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/position-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/position-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b155623cd1afc8619663bfa5e3ecf0a092237d0d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/position-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Position applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-position" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#choose-position" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'position' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ bottom: 0; >+ display: run-in; >+ height: 1in; >+ position: absolute; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box at the bottom of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7de44825c06294a6f32b8a07c1ee211e28d37fe0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011-expected.html >@@ -0,0 +1,11 @@ >+<!doctype html> >+<html> >+<head> >+ <title>Reference rendering - passes if there is the word "PASS" below</title> >+ <link rel="author" title="Opera" href="https://www.opera.com/"> >+</head> >+<body> >+ <p>Test passes if there is the word "PASS" below.</p> >+ <div>PASS</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..42f426993b5376d911e13fa7108f23f7aced23c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Quotes applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#propdef-quotes" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/generate.html#quotes-specify" /> >+ <link rel="match" href="../../reference/pass_if_pass_below.html" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'quotes' property applies to elements with a 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ quotes: "P" "S" "A" "S"; >+ } >+ div:before >+ { >+ content: open-quote open-quote close-quote close-quote; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is the word "PASS" below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/right-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/right-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..91159fdc38c8167c49df13f0e6857fb1524dfd8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/right-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Right applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-right" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#position-props" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'right' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ right: 0; >+ display: run-in; >+ height: 1in; >+ position: absolute; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box on the right side of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2288df6f12f1d1278d61cbb00d75ad8e2a7ab3bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-001.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a block box converts to a block box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box contains a block box." /> >+ <style type="text/css"> >+ div >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ span span >+ { >+ display: block; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span>XXX</span> >+ <span id="span1"> >+ XXX >+ <span>XXX</span> >+ </span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e3e24197a1dd1bdb0306cf269e88b5df0853568c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-002.xht >@@ -0,0 +1,28 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in boxes change to inline boxes</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Sibling block boxes following a run-in makes the run-in become an inline of the block box." /> >+ <style type="text/css"> >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ background: orange; >+ display: block; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is all on the same line and is completely contained within the orange box.</p> >+ <div> >+ <span id="span1">Filler Text</span> >+ <span id="span2">Filler Text</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..075523a086807875c93c4d7bf764224cebc8cd7e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-003.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in boxes and float</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Float prevents run-in from becoming inline." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: block; >+ float: left; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ccb5994f127438fd5d27ae1ae871e64ef450f248 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-004.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in boxes and absolute positioning</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Absolute positioning prevents run-in from becoming inline." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: block; >+ position: absolute; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..87968a3644592682a5b2889de36dc5103d41e270 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-005.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in that starts with a run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Run-in boxes cannot run-in with another box that already starts with a run-in." /> >+ <style type="text/css"> >+ span >+ { >+ display: run-in; >+ } >+ span span >+ { >+ background: orange; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if words "Filler Text" are on three separate lines and the orange box in the middle spans the entire width of the page.</p> >+ <div> >+ <span id="span1"> >+ Filler Text >+ <span>Filler Text</span> >+ Filler Text >+ </span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-006.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-006.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8ba2037f434bc5a1590d231999cada4ccdc4f84e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-006.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-007.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-007.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1b8207113e6a85982b4295be625eb981da82e4ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-007.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a inline-table box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into an inline-table box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: inline-table; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-008.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-008.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..acce1a39cb64c3148b51ce8d9bea9f69c85f0448 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-008.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-row-group box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-row-group box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-row-group; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-009.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-009.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bf5223e8caf95628d228a8aad9e4d440ae58759c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-009.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-row box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-row box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-row; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-010.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-010.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0d36201d6ab64f0b9d89a6d6ff5dee401004fc2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-010.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-cell box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-cell box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-cell; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..59bca8052dec8dcd9d226033a355d84eabc58b1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-011.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-caption box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-caption box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-caption; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-012.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-012.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..be1bc4445af4bcd499f70106cd34afedf8a7a6fa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-012.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-header-group box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-header-group box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-header-group; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-013.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-013.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0ca6e75486d90a8a39b7d177cd5ff5a3f8dd8284 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-013.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in with a table-footer-group box</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#display-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Run-in boxes are converted to block boxes when the run-in box runs into a table-footer-group box." /> >+ <style type="text/css"> >+ span >+ { >+ font: 20px/1em Ahem; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ display: table-footer-group; >+ background: blue; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div> >+ <span id="span1">XX</span> >+ <span id="span2">XX</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d48773f991091dba649e966dd436e26e5f096435 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - abs pos should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if there is an absolutely >+ positioned element between the run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .abspos { position: absolute; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div class="abspos"></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8303df2bf6fa04c87e7e1e7d425c305d0aca20a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block set to abs pos should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a block is dynamically set to >+ absolutely positioned between them and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .abspos { position: absolute; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = "abspos"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..5053a7a5ea06ec58f26c57a43c114c5f5e2fe1f6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline toggled from abs pos should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if an inline between them and >+ the block is toggled from being absolutely positioned."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .abspos { position: absolute; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = ""; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div> >+ <div class="run-in">Run-in header</div> >+ <span id="r" class="abspos">Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..25e4126b1cba5c2152cfa6b863315ba1c63d33d8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Run-ins run into a following block if there is nothing >+ between the run-in and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div><div id="target">Start of block. The >+ run-in header should be inside the border around this block and there should >+ be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..fb4ef0c6e0ca4f49812ecf1f377a89795e1d0a9e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with whitespace</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Run-ins run into a following block if there is collapsed >+ whitespace between the run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d50b1f507118e1e8cda0413a7010f375f70b1d49 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with comments</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Run-ins run into a following block if there is collapsed >+ whitespace and comments between the run-in and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <!-- This is a comment --> >+ >+ <!-- And another comment --> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..faad2521e231683fd472ebdc4f2a0edf7f578f19 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with multiple whitespace nodes</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if there are multiple >+ whitespace nodes between the run-in and the following block. >+ There must be multiple whitespace nodes in the DOM between the >+ run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="makemerun">Run-in header</div> >+ <script type="text/javascript"><![CDATA[ >+ document.body.appendChild(document.createTextNode(" ")); >+ document.body.appendChild(document.createTextNode(" ")); >+ window.onload = function() { >+ var t = document.getElementById("target"); >+ if (t.previousSibling.nodeType == 3 /* Node.TEXT_NODE */ && >+ t.previousSibling.previousSibling.nodeType == 3) { >+ document.getElementById("makemerun").className = "run-in"; >+ } >+ } >+ ]]></script> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..48e01902d9b21cd41cfce7d0dede9d374489ce8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><div class="run-in">Run-in header</div>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be a newline between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..5daf9a48044a31bea34abdebc71772c444c0ad6b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with following block containing run-in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-block-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if the following block has >+ a display:run-in child."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #target > div { display: run-in; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target"><div>Start of block. The run-in header should be inside the border around this block and there should be a newline between the word "header" and the word "Start".</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c507d7933398c68f80e9997352dcb3b36be241e9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with list-item</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if followed by a list-item."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; display: list-item; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ba04ce343544242b42e93f508970cda692ec4827 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; overflow: scroll; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d9bf7db0682d814b05dd981fa293c583f36cb17f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - runs into overflow:scroll block</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-007-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if the block has >+ overflow:scroll."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; overflow: scroll; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b43decd0b79f31b5c4c06774633c06c55c5cd74c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - runs into relatively positioned block</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if the block is relatively >+ positioned."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; position: relative; top: 2em; left: 2em; } >+ #container { position: relative; top: -2em; left: -2em; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..94ebed7c67b44c5aab2d4b5ec1a2629c08998aaa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run-ins run in even if given overflow:scroll</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have >+ overflow:scroll set."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold; overflow: scroll } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2dc30223e6989de345083602caa200148c5cd0d2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - parsing a block after a run-in should make the run-in run in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if a block is parsed after them."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <script type="text/javascript">document.body.offsetHeight; /* flush layout here on purpose */</script> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..afc85413af3638c5b4b1e5bb4736f35f77cd3308 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inserting a block after a run-in should make the run-in run in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if a block is inserted after them."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.createElement("div"); >+ t.id = "target"; >+ t.appendChild(document.createTextNode('Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".')); >+ document.body.appendChild(t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..84bc320670e7a7725769875bb2af28e8c96b2384 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with :before</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins end up before :before content when they run >+ in."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #target:before { content: "Start of block. " } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..af810ac289df4bd1c7ebe433f16c31e1266bee4c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted run-in should run in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that dynamically inserted run-ins run in."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Run-in header")); >+ s.className = "run-in"; >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..541d182a5e4aee8cb871ec7180f1167e0cab27eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ </style> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1cf0951f61526248ef106437613ac2a9efadce9f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic functionality with preserved whitespace</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-pre-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in across preserved whitespace."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..541d182a5e4aee8cb871ec7180f1167e0cab27eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ </style> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8eee5e98df1e94ab27a44041eddc5f022ab8d522 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically preserved whitespace</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-pre-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in across preserved whitespace >+ even if it's preserved dynamically."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .container { white-space: pre; } >+ .container > * { white-space: normal; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var c = document.getElementById("container"); >+ c.className = "container"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..541d182a5e4aee8cb871ec7180f1167e0cab27eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ </style> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4e8d71ae890e58d3c0edb426b42df02e6d932ee9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically added preserved whitespace(2)</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-pre-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in across preserved whitespace >+ even if it's added dynamically."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.insertBefore(document.createTextNode(" "), t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div><div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..541d182a5e4aee8cb871ec7180f1167e0cab27eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ </style> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div> <div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..065fe751f38452aec883fa1b3ca04a405d0e3675 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically added preserved whitespace(3)</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-pre-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in across preserved whitespace >+ even if it's added dynamically."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createTextNode(""); >+ t.parentNode.insertBefore(s, t); >+ flushLayout(document.documentElement); >+ s.data = " "; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div><div id="target">Start of block. The run-in header should be outside the border around this block and there should be a blank line between the run-in header and this block.</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d776c2df87c61c32070d015297058d916beee716 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically added empty preserved whitespace</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in across preserved whitespace if the >+ textnode is empty."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #container { white-space: pre; } >+ #container > * { white-space: normal; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createTextNode(""); >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="container"><div class="run-in">Run-in header</div><div id="target">Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..203d9af6ab3fc7327af5687543bef4d130e85fc2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Run-ins run into a following block even if the block is empty."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..eeace162a0ae4e3dce4d41643e9070a863743402 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Run-ins run into a following block even if the block is >+ dynamically inserted and empty."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.insertBefore(document.createElement("div"), t); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ca901199c6815a53dc07b6055b40e528aeb47944 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed block should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Run-ins run into a following block even if there was another >+ block between that was dynamically removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..71701bf4a45312b922faeb42d15dfbe7cffc89ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001-expected.xht >@@ -0,0 +1,21 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold; border: 5px solid blue; } >+ #target { border: 2px solid black; padding: 1em; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in<br/>header</span>Start of >+ block. The run-in header should be inside the border around this block and >+ there should be no space between the word "header" and the word "Start", >+ other than the 5px vertical blue border. The border of the run-in must >+ have no vertical part on the right in the first line and no vertical part >+ on the left in the second line. The border of the run-in must not extend >+ outside the border of the block.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..51c219e1431f3afb59c565c0a38ea4c02ee595a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht >@@ -0,0 +1,28 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - line-breaking after running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-breaking-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins that run in can line-break correctly, >+ and that their borders are then painted correctly."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; border: 5px solid blue; font-weight: bold; } >+ #target { border: 2px solid black; padding: 1em; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in<br/>header</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start", other than the 5px vertical blue border. The >+ border of the run-in must have no vertical part on the right in the first >+ line and no vertical part on the left in the second line. The border of the >+ run-in must not extend outside the border of the block.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1dc6994452c5d565eeac7722beb05a9ad640948f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002-expected.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold; border: 5px solid blue; direction: ltr; } >+ .one { border-left: none; } >+ .two { border-right: none; } >+ #target { border: 2px solid black; padding: 1em; direction: rtl } >+ </style> >+ </head> >+ <body> >+ <div id="target"> >+ <span class="run-in one">Run-in</span><br/> >+ <span class="run-in two">header</span>Start of block. The run-in header >+ should be inside the border around this block and there should be no >+ space between the word "header" and the word "Start". The border of the >+ run-in must have no vertical part on the left in the first line and no >+ vertical part on the right in the second line. It must have a vertical >+ part on the right in the first line and a vertical part on the left in >+ the second line. The border of the run-in must not extend outside the >+ border of the block.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..fadf930d93b31af2a924d366c53f9fbb955ded63 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - line-breaking after running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-breaking-002-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins that run in can line-break correctly, >+ and that their borders are then painted correctly."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; border: 5px solid blue; font-weight: bold; >+ direction: rtl; } >+ #target { border: 2px solid black; padding: 1em; direction: rtl; } >+ ]]></style> >+ </head> >+ <body> >+ <span class="run-in">Run-in<br/>header</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start". The border of the run-in must have no >+ vertical part on the left in the first line and no vertical part on the >+ right in the second line. It must have a vertical part on the right in >+ the first line and a vertical part on the left in the second line. The >+ border of the run-in must not extend outside the border of the >+ block.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c7034384ff445c9468dd0b0ac51ff50e750280e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - clear on a run-in should apply to the block it runs into</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#flow-control"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that clear on run-ins applies to their block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .bold { font-weight: bold; float: left } >+ #target { border: 2px solid black; } >+ .run-in { display: run-in; clear: both; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="bold">Run-in header</div> >+ <div class="run-in">Some </div> >+ <div>text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f392b4f47d9c45892e0702a4c68372c83fabf55f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - clear on a run-in should apply to the block it runs into</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#flow-control"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that dynamically set clear on run-ins applies to their block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .bold { font-weight: bold; float: left } >+ #target { border: 2px solid black; } >+ .run-in { display: run-in; } >+ .clear { clear: both; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = "run-in clear"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="bold">Run-in header</div> >+ <div id="r" class="run-in">Some </div> >+ <div>text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b9bd1a231bd367cb3629b907389a05a00d49f4cd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - an abs pos child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have abs pos kids."/> >+ <style type="text/css"><![CDATA[ >+ #container { position: relative; top: -1em; } >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; position: relative; top: 1em; } >+ .run-in > span { position: absolute; top: 0 } >+ .run-in > span + span { position: static; visibility: hidden; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"> >+ <div class="run-in">Run-in <span>header</span><span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..109fe47278c9ba044af445ff37f947f7c24cd5aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div></div></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d0fcecd408073f8d70bbcb262aba7e9c3ea93e8b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted block child should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").appendChild(document.createElement("div")); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..83d04ce737a7492936584ead897ebed212f5b73c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed block child should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a block child is dynamically >+ removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div id="r"></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..da9a9e42739a4a855dd4f40e5e93a521724430d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - child dynamically toggled to block display should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have a child >+ dynamically toggled to block display."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .block { display: block; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").className = "block"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span id="r"></span></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c55842087af26d01507185f1b770d24aa9822aab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - child dynamically toggled to inline display should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if they have a child >+ dynamically toggled to inline display."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .inline { display: inline; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").className = "inline"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div id="r"></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..be32cd47cf8d2fff9bd4e49737e9206d9ebb91be >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline containing a block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child inlines >+ which contain blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span><div></div></span></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4c47b020f49853c1400252b09e0f3586cb225242 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted inline child containing block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child inlines containing blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var s = document.createElement("span"); >+ s.appendChild(document.createElement("div")); >+ document.getElementById("r").appendChild(s); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a3b56dcb47845ad7311901cd0fe28d7d6e2eb672 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed inline child containing a block should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if an inline child containing a >+ block is dynamically removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span id="r"><div></div></span></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..de3dfd8495ef6b13d8d39865e6baa8be191b5177 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a floating child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have floating kids."/> >+ <style type="text/css"><![CDATA[ >+ #container { margin-left: -5em; } >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; clear: both; margin-left: 5em; } >+ .run-in > span { float: left; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"> >+ <div class="run-in"><span>Run-</span>in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3b9f05a7f11c749e993dcb7e68974395c4d1afc4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht >@@ -0,0 +1,22 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4178b526af96b04465a441a1117613ec4f678d3c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with table-cell child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain table cells."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span > span { display: table-cell; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span><span>header</span></span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f39619f098c67855f89708ce6b71556a2a777ee2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with table-cell child with an abs pos child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain table cells which contain abs pos kids."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; position: relative; } >+ .run-in > span { visibility: hidden; } /* tests that the abs pos actually >+ shows up */ >+ .run-in > span > span { display: table-cell; visibility: visible; } >+ .run-in > span > span > span { position: absolute; top: 0; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span><span><span>header</span></span></span><span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d7f52d07051c081f503f9b93f2d88f6d77983c20 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with table-cell child with a floating child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain table cells which contain floating kids."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; clear: both; } >+ .run-in > span { visibility: hidden; } /* tests that the float actually >+ shows up */ >+ .run-in > span > span { display: table-cell; visibility: visible; } >+ .run-in > span > span > span { float: left; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in"><span><span><span>Run-</span></span></span>in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2bc8cebeb9523921d6d41cdaa6a998faa01c5751 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with table-row child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain table rowss."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span > span { display: table-row; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span><span>header</span></span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d24dd15f3ea7ec6ee66903fff3b22787a7a6406a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with an abs pos child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain abs pos kids."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; position: relative; } >+ .run-in > span { visibility: hidden; } /* tests that the abs pos actually >+ shows up */ >+ .run-in > span > span { position: absolute; visibility: visible; top: 0} >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span><span>header</span></span><span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8dd899622ae9030e1746a30138480747858843a6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline with a floating child should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inlines >+ which contain floating kids."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; clear: both; } >+ .run-in > span { visibility: hidden; } /* tests that the float actually >+ shows up */ >+ .run-in > span > span { float: left; visibility: visible; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in"><span><span>Run-</span></span>in header</div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bde6b1891cd8a3cb7097fc8edfad7391c5b0b01e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline-block should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child inline-blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: inline-block } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d4e64f1b841c96b4c149f578fac1affe6928f216 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline-table should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child >+ inline-tables."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: inline-table } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e220a1374e9ca95c05dc02bf0677623bc8a35f5b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child rel pos block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child rel pos >+ blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { position: relative; top: 2em; left: 3em; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div></div></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..64fa6f6e1abed68879d4e19e8a5f78ad7127d8a8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted rel pos block child should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child rel pos blocks."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { position: relative; top: 2em; left: 3em; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").appendChild(document.createElement("div")); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c5756fce4840a201ed57449a57a10f253d95e4de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed rel pos block child should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a rel pos block child is dynamically >+ removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { position: relative; top: 2em; left: 3em; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div id="r"></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2f1a3a7b5e560edfb51fca68f5208bf755c4fcf4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child run-in should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child run-ins."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: run-in; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div></div></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e3f978be084e0047cc0ccc92d29f6ebf434c0dc4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted run-in child should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child run-ins."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").appendChild(document.createElement("div")); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..5a812b382b2239a9014737145cb0025132ca681a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed run-in child should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a run-in child is dynamically >+ removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div id="r"></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0182c10de18068fca23937928cd4f3c70d48472f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child tables."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div></div></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..3fd6adda3a6445b312e9e280e20701787016d8a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted table child should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child tables."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").appendChild(document.createElement("div")); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ab76e87e2d1c4574dc7f9d9210edf14d6aed7de7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed table child should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a table child is dynamically >+ removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<div id="r"></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ce29717d8755870488bf859842decaa4d25fd82a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-caption should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-captions."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-caption } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4a003d74f672bb5ba34cd73e22be306c097b1c3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-cell should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-cells."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-cell } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..629f1783d1a91a8aab49caabe349719f835d2188 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-column should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-columns."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-column } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span></span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a62015136e87d27bb575a710e2b54d011d4e0233 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-column should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-columns."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-column-group } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span></span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d9f5c2a07a9cb66bb9675730302ef325156a6b2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child inline containing a table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have child inlines >+ which contain tables."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span><div></div></span></div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the >+ border around this block; it should be on a line by itself before the line >+ containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..edd543d45b08c52196d8b8f2a5957845fab0ef78 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted inline child containing table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if they have dynamically >+ inserted child inlines containing tables."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var s = document.createElement("span"); >+ s.appendChild(document.createElement("div")); >+ document.getElementById("r").appendChild(s); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..5df9c526c3b7d631dfbe9de0e98228f16e862922 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed inline child containing a table should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if an inline child containing a >+ table is dynamically removed."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in div { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header<span id="r"><div></div></span></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7051b3ec15497957f5a9dde9d2abc086e59ba24b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-row should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-rows."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-row } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..681b45f94824a2c7db2a2df3da8620a00680233c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - a child table-row-group should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if they have child table-row-groupss."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .run-in > span { display: table-row-group } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in <span>header</span></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0c2cf4fa0b3d02bbb2fa251dcfd7ebefda3c50ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - display:none should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if there is a display:none >+ element between the run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .none { display: none; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div class="none"></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c9dddee3cdc86560f8aa0df8cbedd37af97d4b63 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block set to display:none should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a block is dynamically set to >+ display:none between them and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .none { display: none; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.normalize(); >+ var r = document.getElementById("r"); >+ r.className = "none"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ac28260492b114d30c552f5c16e66a9f64dedea5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline toggled from display:none should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if an inline between them and >+ the block is toggled from display:none."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .none { display: none; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = ""; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r" class="none">Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d12e13d58e0fcaf3557b7c6ecf72ef6bfebe10c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - fixed pos should not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if there is an fixed >+ positioned element between the run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .fixedpos { position: fixed; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div class="fixedpos"></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e97fe47cad5ea3e0d5735fa9bca849da83ad2916 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block set to fixed pos should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a block is dynamically set to >+ fixed positioned between them and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .fixedpos { position: fixed; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = "fixedpos"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9af28a390c701e1789bd55f07736c20d6123e323 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline toggled from fixed pos should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if an inline between them and >+ the block is toggled from being fixed positioned."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .fixedpos { position: fixed; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = ""; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r" class="fixedpos">Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b5d006cadd81eaa38db62eceef76ef75e7205ed3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - floatshould not prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins actually run in if there is a float >+ element between the run-in and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .float { float: right; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div class="float"></div> >+ <div id="target">Start of block. The run-in header should be inside the border around this block and there should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a5ad3c7de43699e62e799ef77cc633876f337183 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block set to float should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a block is dynamically set to >+ float between them and the following block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .float { float: right; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = "float"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8d4b9e52f2f38d53b48962653a75a4cc4e95e062 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline toggled from float should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if an inline between them and >+ the block is toggled from float."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ .float { float: right; visibility: hidden; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.className = ""; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r" class="float">Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..64f0a45e7d99cfa0636df5e2083948a0a32607bf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001-expected.xht >@@ -0,0 +1,20 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold; color: green; border: 10px outset orange; } >+ #target { border: 2px solid black; margin: 2em; padding: 10px; } >+ body { border: 10px outset orange; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block, should be >+ colored green, and should have an outset orange border. There should be >+ 2em of space on each side between the black border of the block and outset >+ orange border around it.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..da72bc2ef8d53e02e06fe96e92c1434fb5096ebc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht >@@ -0,0 +1,29 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run-in property inheritance</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-inherit-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests property inheritance for run-ins, and margin collapsing >+ for the block following a run-in. Should inherit from our content parent, and the margins should not collapse through a border."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold; border: inherit} >+ #target { border: 2px solid black; color: black; margin: 2em; padding: 10px } >+ #container { color: green; border: 10px outset orange; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block, should be colored green, and should have an >+ outset orange border. There should be 2em of space on each side between >+ the black border of the block and outset orange border around it.</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inheritance-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inheritance-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0e1f0fe6a156f4d90d96abae36b11066ed8fec55 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inheritance-001.xht >@@ -0,0 +1,32 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run-in boxes and inheritance</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="Run-in boxes inherit properties from its parent element." /> >+ <style type="text/css"> >+ div >+ { >+ color: orange; >+ } >+ #span1 >+ { >+ display: run-in; >+ } >+ #span2 >+ { >+ background: blue; >+ display: block; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is orange and is completely contained within the blue box.</p> >+ <div> >+ <span id="span1">Filler Text</span> >+ <span id="span2">Filler Text</span> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..61c726261b9940aeb81e6a691ff1b4c131ae683a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's an inline between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bba6f3b24632ce627a5ab919dc5accb36791864c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted inline should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted inline between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..358b4231c99e6ea94512899fba4bc1d5fcede32e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed inline should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if an inline is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9113603240b767f91342a3650fa2f0704aedb71d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline-block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's an inline-block >+ between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-block; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1ceb4bed25ac2e33494d97c505b29a24f26fc715 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted inline-block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted inline-block between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-block; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..351f27756eadb839a55248a41dd94a05ca3e800d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed inline-block should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if an inline-block is dynamically >+ removed from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-block; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9e30c852f5f7d7c17fe1a5848db152be2b4cc209 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - inline-table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a inline-table between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-table; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..49164c05ecf09dc7097e6cf43302f9ca836474cb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted inline-table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted inline-table between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9b73d0cadc359981644d816adfd00296dcbaae1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed inline-table should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a inline-table is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: inline-table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..128cd3e386efa580f2e94a29734fc2d72920ff8f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: run-in and sibling blocks</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact" /> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/box/run-in/001.xml" type="application/xhtml+xml" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <style type="text/css"> >+ .r { display: run-in; color: blue; } >+ .b { background: blue; display: block; } >+ .fail { background: red; line-height: 0; margin-top: 1em; color: white; } >+ </style> >+ </head> >+ <body> >+ <p>There should be a blue box below.</p> >+ <div class="r">FAIL</div> >+ <div class="b"></div> >+ <div class="fail"> >+ FAIL >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..db741a1e8a3e629eade9253d6c6ba7fc29ff167f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-002.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: run-in and the line box model</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact" /> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/box/run-in/002.xml" type="application/xhtml+xml"/> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in" /> >+ <meta name="assert" content="A run-in element inherits (line-height) from its document tree parent"/> >+ <style type="text/css"> >+ div { font-family: monospace; } >+ .r { color: blue; display: run-in; } >+ .b { background: blue; line-height: 0; } >+ span { color: blue; } >+ </style> >+ </head> >+ <body> >+ <p>There should be a blue box below.</p> >+ <div class="r">FAIL</div> >+ <div class="b"><span> FAIL</span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b46e8b95b72e2bb314c940195d7cb2c8d4025fba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a list-item between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .listitem { display: list-item; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div class="listitem"></div> >+ <div class="listitem">Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f2c0d32c2680c7fe3669dae27f26431e0ad6b368 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted block should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted list-item between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: list-item; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.insertBefore(document.createElement("div"), t); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Some text.")) >+ s.id = "r"; >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..06fda02c743ffbadf4f8d0b1325a295e17afa7a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed block should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a list-item is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: list-item; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e8e677fad05e1ecdace0d1e4a1fb658e4c7c0e34 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - rel pos inline should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a rel pos inline >+ between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .outer { position: relative; top: 50px; } >+ .inner { position: relative; top: -50px; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span class="outer"><span class="inner">Some text.</span></span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bb7c91a0c6155de8d15027f63cf69617d36b768f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002.xht >@@ -0,0 +1,44 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted rel pos inline should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted rel pos inline between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .outer { position: relative; top: 50px; } >+ .inner { position: relative; top: -50px; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.className = "inner"; >+ s.appendChild(document.createTextNode("Some text.")); >+ var s2 = document.createElement("span"); >+ s2.className = "outer"; >+ s2.appendChild(s); >+ t.parentNode.insertBefore(s2, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..cea7d4f4b0e2740b911dc4f0a364fc44ef25b950 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed rel pos inline should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a rel pos inline is dynamically >+ removed from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ .outer { position: relative; top: 50px; } >+ .inner { position: relative; top: -50px; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r" class="outer"><span class="inner">Some text.</span></span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e6c53abfacd3f4f0c8f414efef2ca56ebb334eea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001-expected.xht >@@ -0,0 +1,15 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ #target { border: 2px solid black; width: 500px; height: 200px; } >+ #target > img { width: 100px; height: 100px; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><img src="support/swatch-blue.png"/>The blue square should be inside the border of this block, a square, and half the block's height.</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..417fe01458bb505988309e9b8637aa4186776b65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - basic replaced element</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-replaced-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that replaced elements can actually run in and that >+ they ten get sized correctly."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; width: 20%; height: 50% } >+ #target { border: 2px solid black; width: 500px; height: 200px; } >+ #container { height: 0; width: 0; } >+ ]]></style> >+ </head> >+ <body> >+ <div id="container"> >+ <img class="run-in" src="support/swatch-blue.png" /> >+ <div id="target">Start of block. The blue square should be inside the >+ border of this block, a square, and half the block's height.</div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..05bd61a0b5996ad35fab406322bf7c2049684307 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - should run out when they stop being run-ins</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run once they stop being run-ins."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; } >+ .bold { font-weight: bold; } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").className = "bold"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r" class="run-in bold">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..40d23e4fb0a20b88ef7017cbd0cf6e06c893891b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - should run out when following block becomes an inline</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run once their following block becomes an inline."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold; } >+ #target { border: 2px solid black; } >+ .inline { display: inline; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("r").className = "inline"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..226081278db0881c3274934ea0e87aab56ea79d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - should run in when following inline becomes a block</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in when the inline after them becomes a block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold; } >+ #target { border: 2px solid black; } >+ .block { display: block; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ document.getElementById("target").className = "block"; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="target">Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</span> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6c6942f62edb75c52095aba3133e4ef6968503e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run in that has not run in should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a run in that has >+ not run in between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.<div><!-- Make us not run in --></div></div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..220c45ed246b2a8e5e46976b676b2837c0d21d56 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002.xht >@@ -0,0 +1,42 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted run-in which does not run in should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted run-in which has not run in between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.insertBefore(document.createElement("div"), t); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Some text.")) >+ s.id = "r"; >+ s.appendChild(document.createElement("div")); /* make s not run in */ >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..621e0bd5a51652826b6bb421d27022a3c1d3a53b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed run-in which did not run in should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a run-in which has not run in is >+ dynamically removed from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.<div><!-- Make us not run in --></div></div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4017e8feae17e2c1e6351cae283151bc71f9cf95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht >@@ -0,0 +1,26 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run in that has run in should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a run-in that has >+ run in between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some </div> >+ <div>text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9839d9bd59dae1f3621fe3959d643cb4c6fa9026 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht >@@ -0,0 +1,44 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted run-in which runs in should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted run-in which has run in between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("text.")) >+ t.parentNode.insertBefore(s, t); >+ flushLayout(document.documentElement); >+ var s2 = document.createElement("div"); >+ s2.appendChild(document.createTextNode("Some ")) >+ s2.id = "r"; >+ s.parentNode.insertBefore(s2, s); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ae2bceef2dfdd25ec3a067b42b0350fffc5cd140 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed run-in which ran in should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a run-in which has run in is >+ dynamically removed from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="r">Some text.</div> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..910831a74226122a872a77ca65fdb8cda3e9d4ed >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run-in which runs in should prevent running in of dynamically inserted run-in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that dynamically inserted run-ins don't run in if >+ there's a run-in which has run in between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Run-in header")); >+ s.className = "run-in"; >+ r.parentNode.insertBefore(s, r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r">Some </div> >+ <div>text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..00e24408e805443925bbcd276de904797510d44c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008.xht >@@ -0,0 +1,41 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - run-in which does not run in should prevent running in of dynamically inserted run-in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that dynamically inserted run-ins don't run in if >+ there's a run-in which has not run in between them and the >+ block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ #r { display: run-in; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ var s = document.createElement("div"); >+ s.appendChild(document.createTextNode("Run-in header")); >+ s.className = "run-in"; >+ r.parentNode.insertBefore(s, r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div id="r">Some text.<div></div></div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2af7f4a73b92011dfce264cb8ef07dd844c4f979 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a table between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..2ca80275469cdec5c0a90f30f9bd06301cc15b79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted table should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted table between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..aa4d9f4497f99a6bb8e1da5c5e576cb0d5e8aa5e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed table should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a table is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b302a2586b72d6fbc888e37a4a64027c64e33499 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - table-cell should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a table-cell between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-cell; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..04f5e80c534bff60e139548f2e5977a05cf9861b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted table-cell should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted table-cell between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-cell; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..49ab6455543120e03847c08453ff0ef89bde66c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed table-cell should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a table-cell is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-cell; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..5fff0a34d2e67f860485bfbf54c4682925d04d86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - table-row should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a table-row between >+ them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-row; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span>Some text.</span> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a5e069daac88cc51c837c3adb4ecb190eed95872 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted table-row should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's a dynamically >+ inserted table-row between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-row; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ var s = document.createElement("span"); >+ s.appendChild(document.createTextNode("Some text.")) >+ t.parentNode.insertBefore(s, t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..755b46351b7e39c9d5f4098f4d890bb7d0386675 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht >@@ -0,0 +1,40 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed table-row should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if a table-row is dynamically removed >+ from between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ span { display: table-row; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var r = document.getElementById("r"); >+ r.parentNode.removeChild(r); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <span id="r">Some text.</span> >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..22cf546bc5dc9bc5b3e05a1cafedf43faf09072c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001.xht >@@ -0,0 +1,24 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - text should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's text between them >+ and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ Some text. >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..545dee956e09829d20ed4b7b6011f73ea99fd3a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically inserted text should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's dynamically >+ inserted text between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.insertBefore(document.createTextNode("Some text."), t); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..88f4930b4a678610fc8882d26ca9658198df231a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div>Some text.</div> >+ <div id="target">Start of block. The run-in header should NOT be inside >+ the border around this block; it should be on a line by itself before the >+ line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..66a4451d32ba2c3841b10b303c6454d99fbcf5fa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically changed text should prevent running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-text-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins don't run in if there's dynamically >+ changed text between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.previousSibling.data = "Some text."; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ <div id="target">Start of block. The run-in header should NOT be inside the border around this block; it should be on a line by itself before the line containing "Some text".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9411b648191821911caa65bfe20404831c58afa2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically removed text should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if text is dynamically removed from >+ between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.parentNode.removeChild(t.previousSibling); >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ Some text. >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..597c7237a741bfc72029b03c7b9727065d1ce456 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005-expected.xht >@@ -0,0 +1,17 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <style type="text/css"> >+ .run-in { font-weight: bold } >+ #target { border: 2px solid black; } >+ </style> >+ </head> >+ <body> >+ <div id="target"><span class="run-in">Run-in header</span>Start of block. >+ The run-in header should be inside the border around this block and there >+ should be no space between the word "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e981b9e2d35f6dc43c819ea9261a60b142e3747e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht >@@ -0,0 +1,39 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Run in - dynamically set to whitespace text should allow running in</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"/> >+ <link rel="reviewer" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#run-in"/> >+ <link rel="match" href="run-in-basic-ref.xht"/> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" >+ content="Tests that run-ins run in if text is dynamically set to >+ whitespace between them and the block."/> >+ <style type="text/css"><![CDATA[ >+ div { display: block; } >+ .run-in { display: run-in; font-weight: bold } >+ #target { border: 2px solid black; } >+ ]]></style> >+ <script type="text/javascript"><![CDATA[ >+ function flushLayout(elt) { >+ elt.offsetWidth; /* Just undefined on non-elements, but that's ok */ >+ for (var i = 0; i < elt.childNodes.length; ++i) { >+ flushLayout(elt.childNodes[i]); >+ } >+ } >+ window.onload = function() { >+ flushLayout(document.documentElement); >+ var t = document.getElementById("target"); >+ t.previousSibling.data = " "; >+ } >+ ]]></script> >+ </head> >+ <body> >+ <div class="run-in">Run-in header</div> >+ Some text. >+ <div id="target">Start of block. The run-in header should be inside the >+ border around this block and there should be no space between the word >+ "header" and the word "Start".</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/black15x15.png b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/black15x15.png >new file mode 100644 >index 0000000000000000000000000000000000000000..b1bbef2cd55ccdc3417dfb195cd29946879b5ee7 >GIT binary patch >literal 168 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11SGd?VUh(>oCO|{#S9F5he4R}c>anMpde#$ >zkh>GZx^prwfgF}}M_)$<hK>E)e-c@Ne1&9>AYTTCDm4a%h86~fUqGRT7Yq!g1`G_Z >z5*Qe)W-u^_7tGleXakfG^mK6y(FjgXkYHV`XfVZzfq`ig17nE@YXwk}!PC{xWt~$( >F6993VB~<_b > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue15x15.png b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue15x15.png >new file mode 100644 >index 0000000000000000000000000000000000000000..89de32fdb8a4e48b1320f40f5a75352773077cee >GIT binary patch >literal 185 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11SGd?VUh(>oCO|{#S9F5he4R}c>anMpde#$ >zkh>GZx^prwfgF}}M_)$<hK>E)e-c@Ne1&9>AYTTCDm4a%h86~fUqGRT7Yq!g1`G_Z >z5*Qe)W-u^_7tGleXakf`@^o<w(FjgXN%(Qzfs0|4n%u+%B2Ty;@ydnvnyztk0=k6z >V)g}Gv*iewk44$rjF6*2UngFS5E#&|J > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue96x96.png b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue96x96.png >new file mode 100644 >index 0000000000000000000000000000000000000000..820f8cace2143bfc45c0c301e84b6c29b8630068 >GIT binary patch >literal 1010 >zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!Wi-X*q7}lMWc?smOq&xaLGB9lH >z=l+w(3gjy!dj$D1FjT2AFf_C<F#G}vHN0S8C^cYUc$L7wU^Rn*LA+qju0R_G24;o; >zpAc6DhW|h{qhK@yMrH^cH_nOz`dp&KHKHUqKdq!Zu_%=xATcwqM9<GPM4`-B&)96` >z^GB*cH4dIGjv*P&Z!a{0g6i;spTY4DI9dY|4>T|`v++n6B;aK<+8d}OFfd9ReoF^w >N_jL7hS?83{1OVd{KuZ7s > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/green15x15.png b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/green15x15.png >new file mode 100644 >index 0000000000000000000000000000000000000000..51741584a07a915c9efc356c08aa04535fd056bf >GIT binary patch >literal 170 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&Ea{HEjtmSN`?>!lvI6;>1s;*b >z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)WWVC&vcr8$khNp{T >zh=qT0N=Cwu^A2VVnQG#b*9yK#D$13;>f<)0x6Q1x(ap1gk)giEdf%FmKv$q122WQ% >Jmvv4FO#u1lE&c!i > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/swatch-blue.png b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/swatch-blue.png >new file mode 100644 >index 0000000000000000000000000000000000000000..bf2759634d45dbe3df13868341eddb7e4bf24172 >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD+9y-u8K?HKrWA`i(^Q| >dt>gp+Mj%g@f$_JNuojTT;OXk;vd$@?2>>P$4{-nh > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..7541c5c637eb759ed92d193f7576f66e02975c21 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/w3c-import.log >@@ -0,0 +1,21 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/black15x15.png >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue15x15.png >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/blue96x96.png >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/green15x15.png >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/support/swatch-blue.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-anonymous-block-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-anonymous-block-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d33fad65899ba65aadf23392cbe27b5c4876b798 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-anonymous-block-001.xht >@@ -0,0 +1,34 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: The anonymous block box around a table does not work with run-in interaction</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#model" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The anonymous block around a table does not behave like a block for 'run-in' interaction." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ } >+ table >+ { >+ background: black; >+ } >+ td >+ { >+ height: 100px; >+ width: 100px; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" is above the box.</p> >+ <div>Filler Text</div> >+ <table> >+ <tr> >+ <td></td> >+ </tr> >+ </table> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-layout-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-layout-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7a1e33dd7b7d44aafeb6d6b5b8c6fbf2b09adefc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-layout-applies-to-004.xht >@@ -0,0 +1,58 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Table-layout and 'display: run-in' elements</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#propdef-table-layout" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#width-layout" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="Table-layout does not apply to 'display: run-in' elements." /> >+ <style type="text/css"> >+ #test >+ { >+ display: run-in; >+ table-layout: fixed; >+ width: 10em; >+ } >+ .colgroup >+ { >+ display: table-column-group; >+ width: 5em; >+ } >+ .tr >+ { >+ display: table-row; >+ } >+ .td >+ { >+ background: black; >+ display: table-cell; >+ font: 1em Ahem; >+ overflow: hidden; >+ padding: 0; >+ } >+ #reference >+ { >+ background: blue; >+ height: 2em; >+ width: 20em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if both bars below are the same width.</p> >+ <div id="test"> >+ <div class="colgroup"></div> >+ <div class="colgroup"></div> >+ <div class="tr"> >+ <div class="td">XXXXX</div> >+ <div class="td">XXXXX</div> >+ </div> >+ <div class="tr"> >+ <div class="td">XXXXXXXXX0</div> >+ <div class="td">XXXXXXXXX0</div> >+ </div> >+ </div> >+ <div id="reference"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-align-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-align-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0f41d405322a2e79abfd62ef7af567a3f100f85c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-align-applies-to-004.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Text-align application on a 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-text-align" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#alignment-prop" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'text-align' property is applied ton 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ border: solid; >+ display: run-in; >+ text-align: right; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below is aligned to the right side of the box.</p> >+ <div>Filler Text Filler Text Filler Text Filler Text</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8353cf8e32adc9c27916ba6fd72e377c4c896f1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004-expected.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if Filler Text has line under it</title> >+ <link rel="author" title="Opera" href="https://www.opera.com/"> >+ <link rel="mismatch" href="pass_if_filler_text_underlined-notref.html"> >+</head> >+<body> >+ <p>Test passes if the "Filler Text" below has a line under it.</p> >+ <div><u>Filler Text</u></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..94aeff8d910b73afdee4e17ab78a75444d6c14d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Text-decoration application on a 'run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-text-decoration" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#lining-striking-props" /> >+ <link rel="match" href="../../reference/pass_if_filler_text_underlined.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'text-decoration' property applies to a 'run-in' element." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ text-decoration: underline; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the "Filler Text" below has a line under it.</p> >+ <div>Filler Text</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-indent-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-indent-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..778d7ca27db219a247b3b78c0a286d4fa2a395d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-indent-applies-to-004.xht >@@ -0,0 +1,36 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Text-indent application on a 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-text-indent" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#indentation-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'text-indent' property is applied to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font: 16px/1em Ahem; >+ } >+ div div >+ { >+ display: run-in; >+ text-indent: 10em; >+ } >+ #div1 >+ { >+ background: blue; >+ height: 1em; >+ margin-left: 10em; >+ width: 5em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the black box below is directly above the blue box. (Note that the two boxes do not need to be touching.)</p> >+ <div> >+ <div>XXXXX</div> >+ </div> >+ <div id="div1"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a5472e0e603a91cb63bf9872dbc8a54bb176bfeb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if F in Filler Text is upper-case</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+</head> >+<body> >+ <p>Test passes if the letter "F" in the words "Filler Text" below is in upper-case.</p> >+ <div>Filler Text</div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bfbc7b128636ba963b91dd4e72b4c2de425039b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Text-transform application to 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-text-transform" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#caps-prop" /> >+ <link rel="match" href="../../reference/pass_if_letter_uppercase.html" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'text-transform' property is applied to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ display: run-in; >+ text-transform: capitalize; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the letter "F" in the words "Filler Text" below is in upper-case.</p> >+ <div>filler text</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/top-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/top-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..31f19b92ef13ff2be788e29690a4c43836c48529 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/top-applies-to-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Top applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-top" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#position-props" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'top' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ background: green; >+ top: 0; >+ display: run-in; >+ height: 1in; >+ position: absolute; >+ width: 1in; >+ } >+ p >+ { >+ margin-top: 1.5in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a box at the top of the page.</p> >+ <div></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/unicode-bidi-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/unicode-bidi-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..194e295bab476a571cd127f66e4a96f54ea95937 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/unicode-bidi-applies-to-011.xht >@@ -0,0 +1,23 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Unicode-bidi applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-unicode-bidi" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#direction" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'unicode-bidi' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ div >+ { >+ direction: rtl; >+ display: run-in; >+ unicode-bidi: bidi-override; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there are the words "PASS PASS" below.</p> >+ <div>SSAP SSAP</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/vertical-align-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/vertical-align-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6b6ddd4417fe8b7601fa6662178842950c25aee4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/vertical-align-applies-to-011.xht >@@ -0,0 +1,27 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Vertical-align applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#leading" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'vertical-align' property does not apply to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: orange; >+ color: blue; >+ display: run-in; >+ font: 20px/1em Ahem; >+ height: 1in; >+ vertical-align: bottom; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the blue box below is in the upper-left corner of the orange box.</p> >+ <div>X</div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/visibility-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/visibility-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ae4f8213e979ed408b7f278e325f0925f718ceba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/visibility-applies-to-011.xht >@@ -0,0 +1,33 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Visibility applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#propdef-visibility" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visufx.html#visibility" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'visibility' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ #div1 >+ { >+ background: red; >+ display: run-in; >+ height: 1in; >+ visibility: hidden; >+ width: 1in; >+ } >+ .box >+ { >+ background: black; >+ height: 1em; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is white space between the boxes below and there is no red visible on the page.</p> >+ <div class="box"></div> >+ <div id="div1"><div></div></div> >+ <div class="box"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..74059112cc99d8c49e2b5c0fb5434d88c44cd827 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/w3c-import.log >@@ -0,0 +1,376 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/after-content-display-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/anonymous-box-generation-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-attachment-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-image-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-position-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/background-repeat-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/before-content-display-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-bottom-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-collapse-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-left-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-right-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-spacing-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-top-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/border-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/bottom-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/caption-side-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/clear-runin-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-increment-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/counter-reset-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/cursor-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/direction-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/display-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/empty-cells-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/first-line-pseudo-009.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/float-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-family-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-size-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-style-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-variant-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/font-weight-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/height-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/left-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/letter-spacing-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/line-height-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-image-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-position-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/list-style-type-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-bottom-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-left-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-right-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/margin-top-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-height-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/max-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-height-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/min-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-color-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-style-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/outline-width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/overflow-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-bottom-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-left-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-right-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/padding-top-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/position-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/quotes-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/right-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-006.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-007.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-008.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-009.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-010.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-012.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-013.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-abspos-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-006.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-007.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-008.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-009.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-010.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-012.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-013.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-014.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-015.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-016.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-017.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-basic-018.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-block-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-breaking-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-clear-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-abspos-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-block-inside-inline-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-float-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-006.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-007.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-block-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-inline-table-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-relpos-block-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-run-in-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-caption-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-cell-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-column-group-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-inside-inline-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-group-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-display-none-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-fixedpos-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-float-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inherit-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inheritance-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-block-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-inline-table-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-linebox-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-listitem-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-relpos-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-replaced-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-restyle-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-006.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-007.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-run-in-between-008.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-cell-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-table-row-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/run-in-text-between-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-anonymous-block-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/table-layout-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-align-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-decoration-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-indent-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/text-transform-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/top-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/unicode-bidi-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/vertical-align-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/visibility-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/white-space-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/word-spacing-applies-to-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/z-index-applies-to-011.xht >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/white-space-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/white-space-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..855a1706991a9e5d0b15ae819cdc78dcf7865cab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/white-space-applies-to-004.xht >@@ -0,0 +1,38 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: White-space application to 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-white-space" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#white-space-prop" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'white-space' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font: 16px/1em Ahem; >+ } >+ #div1 >+ { >+ display: run-in; >+ white-space: pre; >+ } >+ #div2, #div3 >+ { >+ background: black; >+ display: inline-block; >+ height: 1em; >+ width: 2em; >+ } >+ #div3 >+ { >+ margin-left: 3em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there are only two boxes below.</p> >+ <div id="div1">XX XX</div> >+ <div id="div2"></div><div id="div3"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d9cb8910789e378e7406f3b4ec94afa9d77ced4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011-expected.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE HTML> >+<html> >+<head> >+ <title>Reference rendering - pass if square below, black 96px</title> >+ <link rel="author" title="Opera Software" href="https://opera.com"> >+ <style type="text/css"> >+ div { >+ width: 96px; >+ height: 96px; >+ background-color: black; >+ } >+ </style> >+</head> >+<body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9e5da720f83d74f240ec0149066ac8962dfd1fbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/width-applies-to-011.xht >@@ -0,0 +1,25 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Width applied to elements with 'display' set to 'run-in'</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#propdef-width" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visudet.html#the-width-property" /> >+ <link rel="match" href="../../reference/pass_if_square_96px_black.html"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'width' property applies to elements with 'display' set to 'run-in'." /> >+ <style type="text/css"> >+ div >+ { >+ background: black; >+ display: run-in; >+ height: 1in; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is a square below.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/word-spacing-applies-to-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/word-spacing-applies-to-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8386aa94100796e0263e7028a7f16316d6f83384 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/word-spacing-applies-to-004.xht >@@ -0,0 +1,35 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Word-spacing application to 'display: run-in' element</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#propdef-word-spacing" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/text.html#spacing-props" /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The 'word-spacing' property applies to 'display: run-in' elements." /> >+ <style type="text/css"> >+ div >+ { >+ font: 16px/1em Ahem; >+ } >+ div div >+ { >+ display: run-in; >+ word-spacing: 10em; >+ } >+ #div1 >+ { >+ background: blue; >+ height: 1em; >+ width: 22em; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there are two black boxes below and the last black box ends when the blue box ends.</p> >+ <div> >+ <div>XXXXX XXXXXX</div> >+ </div> >+ <div id="div1"></div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/z-index-applies-to-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/z-index-applies-to-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6f493ba85cbc5082b99e0f7e72283651925fb482 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/run-in/z-index-applies-to-011.xht >@@ -0,0 +1,37 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: Z-index applied to element with 'display' set to run-in</title> >+ <link rel="author" title="Microsoft" href="http://www.microsoft.com/" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#propdef-z-index" /> >+ <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#z-index" /> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="The 'z-index' property applies to elements with a display of run-in." /> >+ <style type="text/css"> >+ #div2 >+ { >+ background: green; >+ display: run-in; >+ z-index: 1; >+ } >+ #zindex >+ { >+ background: red; >+ top: -1in; >+ } >+ #div2, #zindex >+ { >+ height: 1in; >+ position: relative; >+ width: 1in; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is no red visible on the page.</p> >+ <div> >+ <div id="div2"><div></div></div> >+ <div id="zindex"></div> >+ </div> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/w3c-import.log >index 8af3d808c56884298ee40d0421e6f330711ab3df..8e263c865ef9136296d9c9cfea8b6d23360b603b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-display/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-display/w3c-import.log >@@ -23,11 +23,19 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-002-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-before-after-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-block-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-block-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-block-002-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-block-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-button.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-computed-style.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-details.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-before-after-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-before-after-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-before-after-first-letter-001-expected.html >@@ -58,6 +66,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-multicol-001-inline.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-multicol-001-none-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-multicol-001-none.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-pseudo-insertion-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-001-inline-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-001-inline.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-001-none-expected.html >@@ -66,10 +76,18 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-002-inline.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-002-none-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-dynamic-table-002-none.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset-nested-legend.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-fieldset.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-first-line-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-flex-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-flex-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-flex-002-expected.html >@@ -82,6 +100,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-inline-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-inline-flex-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-inline-flex-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-line-height.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-list-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-list-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-multicol-001-expected.html >@@ -90,17 +110,31 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-oof-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-oof-002-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-oof-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-parsing-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-state-change-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-state-change-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-suppression-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-anchor-child.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-elements.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-svg-switch-child.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-table-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-table-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-table-002-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-table-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-td-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-td-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-inherit.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-only-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-text-only-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-tr-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-tr-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-contents-unusual-html-elements-none.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-flow-root-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-flow-root-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-display/display-list-item-height-after-dom-change.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..f4adc0ec9ca0728f56d7bca76fc4d908ae1fab38 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/OWNERS >@@ -0,0 +1,9 @@ >+@mrego >+@tomalec >+@plinss >+@jxs >+@tabatkins >+@fantasai >+@atanassov >+@javifernandez >+@svillar >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/README.md b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/README.md >new file mode 100644 >index 0000000000000000000000000000000000000000..59e9c081a7e9e94df895797556a56d8e6faf7c79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/README.md >@@ -0,0 +1,36 @@ >+CSS Grid Layout Module Level 1 Test Suite >+----------------------------------------- >+ >+Directory containing the CSS Grid Layout spec test suite. >+ >+This suite is structured in different folders for each section of the spec >+(the name of the folders corresponds to the "id" of each section): >+ >+* [3 Grid Containers](https://drafts.csswg.org/css-grid-1/#grid-model): >+ `grid-model` >+* [4 Grid Items](https://drafts.csswg.org/css-grid-1/#grid-items): >+ `grid-items` >+* [5 The Explicit Grid](https://drafts.csswg.org/css-grid-1/#grid-definition): >+ `grid-definition` >+* [6 The Implicit Grid](https://drafts.csswg.org/css-grid-1/#implicit-grids): >+ `implicit-grids` >+* [7 Grid Definition Shorthand](https://drafts.csswg.org/css-grid-1/#grid-shorthand): >+ `grid-shorthand` >+* [8 Clamping Overlarge Grids](https://drafts.csswg.org/css-grid-1/#overlarge-grids): >+ `overlarge-grids` >+* [9 Placing Grid Items](https://drafts.csswg.org/css-grid-1/#placement): >+ `placement` >+* [10 Absolute Positioning](https://drafts.csswg.org/css-grid-1/#abspos): >+ `abspos` >+* [11 Alignment and Spacing](https://drafts.csswg.org/css-grid-1/#alignment): >+ `alignment` >+* [12 Grid Sizing](https://drafts.csswg.org/css-grid-1/#layout-algorithm): >+ `layout-algorithm` >+* [13 Fragmenting Grid Layout](https://drafts.csswg.org/css-grid-1/#pagination): >+ `pagination` >+ >+Links: >+ >+* [Spec Editor's Draft](https://drafts.csswg.org/css-grid-1/) >+* [Test Plan](http://test.csswg.org/source/css-grid-1/test-plan/) >+* [Test Suite](http://test.csswg.org/suites/css-grid-1_dev/nightly-unstable/) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..81ea909d029937b67d06e39ab899930c9a623c2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items don't avoid auto-fit tracks to collapse."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 1 / 5" class="abs" data-expected-width="30" data-expected-height="10"></span> >+ <span style="grid-column: 1" data-expected-width="30" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..27fc722e6c31555e1e3a44ad88ce0e408c86f997 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks tracks before the first in-flow item also collapse and positioned items don't have any impact."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 1 / 5" class="abs" data-expected-width="30" data-expected-height="10"></span> >+ <span style="grid-column: 2" data-expected-width="30" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1c893392a4be57a2b627f8950ce32cd006a2523f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items will use the area defined by the in-flow items, ignoring any collapsed track."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 1 / 5" class="abs" data-expected-width="60" data-expected-height="10"></span> >+ <span style="grid-column: 2 / 4" data-expected-width="60" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..54b2ff79027f93506684b06873387955c7c6ef3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks and gaps</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items ignore collapsed gaps."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+ grid-gap: 5px; >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 1 / 5" class="abs" data-expected-width="30" data-expected-height="10"></span> >+ <span style="grid-column: 1" data-expected-width="30" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..56f870f4ec088a2aa23e9f3513dc5447b8ffd897 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks and gaps</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items ignore collapsed gaps, both before and after the first in-flow item ."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+ grid-gap: 5px; >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 1 / 5" class="abs" data-expected-width="30" data-expected-height="10"></span> >+ <span style="grid-column: 2" data-expected-width="30" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e301d34937679ac48444faef74f142a654f743a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks and gaps</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items ignore collapsed gaps but consider those between in-flow items inside their grid area."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 200px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px); >+ grid-gap: 5px; >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 2 / 5" class="abs" data-expected-width="65" data-expected-height="10"></span> >+ <span style="grid-column: 2 / 4" data-expected-width="65" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8c4621627fd7e4c91d52ca3b1387a71c1dd0f70e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid positioned items in auto-fit tracks and gaps</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#abspos" title="9. Absolute Positioning"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#auto-repeat" title="7.2.2.2. Repeat-to-fill: auto-fill and auto-fit repetitions"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#valdef-repeat-auto-fit"> >+<meta name="assert" content="This test checks that positioned items ignore collapsed gaps even with non-empty tracks before and after."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.container { >+ width: 250px; >+} >+.grid { >+ position: relative; >+ grid: 10px / repeat(auto-fit, 30px) 50px; >+ grid-gap: 5px; >+} >+span { >+ background: blue; >+} >+.abs { >+ position: absolute; >+ top:0; right:0; bottom:0; left:0; >+ background: pink; >+} >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div id="log"></div> >+<br> >+<div class="container"> >+ <div class="grid"> >+ <span style="grid-column: 2 / 5" class="abs" data-expected-width="65" data-expected-height="10"></span> >+ <span style="grid-column: 2 / 4" data-expected-width="65" data-expected-height="10"></span> >+ </div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/support/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..6d6d9da584446e6cd4e16970f678e62abf67c64b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/support/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/support/grid.css >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/w3c-import.log >index 6c7f582ec790e2e83495c193f0fbad4872d4d158..7d4b51a8b7aff418cf3df3bb22a4af360e8df09a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/w3c-import.log >@@ -27,6 +27,13 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-children-writing-modes-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-item-dynamic-change-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-item-dynamic-change-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-background-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-background-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-background-rtl-001-expected.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..147fd2d72f2e16e0b61b0efde9cdb6a2b085ef16 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html >@@ -0,0 +1,75 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Alignment along column axis of stcky positioned items</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Sticky positioned grid items are aligned correcly."> >+<style> >+.container { >+ border: solid 1px; >+ overflow: auto; >+ height: 500px; >+} >+.grid { >+ position: relative; >+ float: left; >+ display: grid; >+ grid-template-columns: 75px 75px 75px 75px; >+ grid-template-rows: 100px 100px 100px 300px; >+ background: grey; >+ height: 400px; >+ margin-right: 20px; >+} >+.sticky { >+ position: -webkit-sticky; >+ position: -webkit-sticky; >+ width: 20px; >+ height: 20px; >+ background-color: #cae8ca; >+} >+.item1 { >+ top: 0px; >+ grid-column: 1; >+ grid-row: 1; >+} >+.item2 { >+ top: 0px; >+ grid-column: 2; >+ grid-row: 2; >+} >+.item3 { >+ top: 0px; >+ grid-column: 3; >+ grid-row: 3; >+} >+.item4 { >+ grid-column: 4; >+ grid-row: 4; >+ background: lightgrey; >+} >+.scroll { overflow: auto; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div class="container"> >+ <div style="height:30px"></div> >+ <div class="grid"> >+ <div class="item1 sticky alignSelfStart" data-offset-x="0" data-offset-y="0"></div> >+ <div class="item2 sticky alignSelfCenter" data-offset-x="75" data-offset-y="140"></div> >+ <div class="item3 sticky alignSelfEnd" data-offset-x="150" data-offset-y="280"></div> >+ <div class="item4"></div> >+ </div> >+ <div class="grid scroll"> >+ <div class="item1 sticky alignSelfStart" data-offset-x="0" data-offset-y="0"></div> >+ <div class="item2 sticky alignSelfCenter" data-offset-x="75" data-offset-y="140"></div> >+ <div class="item3 sticky alignSelfEnd" data-offset-x="150" data-offset-y="280"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="height:2000px"></div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82c24dc6ed0c540bcf2dac82ec7eaa34b23156f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html >@@ -0,0 +1,75 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Alignment along column axis of stcky positioned items</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Sticky positioned grid items are aligned correcly, but preserving non-static positions when required."> >+<style> >+.container { >+ border: solid 1px; >+ overflow: auto; >+ height: 500px; >+} >+.grid { >+ position: relative; >+ float: left; >+ display: grid; >+ grid-template-columns: 75px 75px 75px 75px; >+ grid-template-rows: 100px 100px 100px 300px; >+ background: grey; >+ height: 400px; >+ margin-right: 20px; >+} >+.sticky { >+ position: -webkit-sticky; >+ position: -webkit-sticky; >+ width: 20px; >+ height: 20px; >+ background-color: #cae8ca; >+} >+.item1 { >+ top: 40px; >+ grid-column: 1; >+ grid-row: 1; >+} >+.item2 { >+ top: 100px; >+ grid-column: 2; >+ grid-row: 2; >+} >+.item3 { >+ top: 290px; >+ grid-column: 3; >+ grid-row: 3; >+} >+.item4 { >+ grid-column: 4; >+ grid-row: 4; >+ background: lightgrey; >+} >+.scroll { overflow: auto; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div class="container"> >+ <div style="height:30px"></div> >+ <div class="grid"> >+ <div class="item1 sticky alignSelfStart" data-offset-x="0" data-offset-y="10"></div> >+ <div class="item2 sticky alignSelfCenter" data-offset-x="75" data-offset-y="140"></div> >+ <div class="item3 sticky alignSelfEnd" data-offset-x="150" data-offset-y="280"></div> >+ <div class="item4"></div> >+ </div> >+ <div class="grid scroll"> >+ <div class="item1 sticky alignSelfStart" data-offset-x="0" data-offset-y="40"></div> >+ <div class="item2 sticky alignSelfCenter" data-offset-x="75" data-offset-y="140"></div> >+ <div class="item3 sticky alignSelfEnd" data-offset-x="150" data-offset-y="290"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="height:2000px"></div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..caf1cdc38ff13318bc6d17cb8b8d74c72a95b541 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html >@@ -0,0 +1,67 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along column-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Grid items orthogonal to the Baseline Alignment Context should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.container { position: relative; } >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 200px 100px / 100px 200px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 25px; } >+.paddingRight { padding-right: 25px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and verticalRL item</pre> >+ >+<div class="grid width300 alignItemsBaseline"> >+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="firstRowSecondColumn bigFont" data-offset-x="100" data-offset-y="160" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 height25"></div> >+</div> >+ >+<pre>Horizontal grid and verticalLR item</pre> >+ >+<div class="grid width300 alignItemsBaseline"> >+ <div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="firstRowSecondColumn bigFont" data-offset-x="100" data-offset-y="160" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 height25"></div> >+</div> >+ >+<pre>VerticalLR grid and Horizontal item</pre> >+ >+<div class="grid alignItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn horizontalTB" data-offset-x="35" data-offset-y="0" data-expected-width="200" data-expected-height="100">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="firstRowSecondColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="100" data-expected-width="125" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+<pre>VerticalRL grid and Horizontal item</pre> >+ >+<div class="grid alignItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn horizontalTB" data-offset-x="100" data-offset-y="0" data-expected-width="200" data-expected-height="100">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="firstRowSecondColumn bigFont paddingRight" data-offset-x="40" data-offset-y="100" data-expected-width="125" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..444def438e7d43a7810ec794fd742ac8bd0a3ec4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along column-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Empty grid items with fixed size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 200px 100px / 100px 200px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.fixedHeight { height: 125px; } >+.fixedWidth { width: 125px; } >+ >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and item with fixed height</pre> >+ >+<div class="grid width300 alignItemsBaseline"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="firstRowSecondColumn bigFont" data-offset-x="100" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 height25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with fixed width</pre> >+ >+<div class="grid alignItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="30" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with fixed width</pre> >+ >+<div class="grid alignItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="175" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingRight" data-offset-x="115" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4691cf74de6a4bfb6afc863ca467f773adae3fb1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html >@@ -0,0 +1,64 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along column-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Empty grid items with relative size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 200px 100px / 100px 200px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.height75 { height: 75px; } >+.width25 { width: 25px; } >+.width75 { width: 75px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.relativeHeight { height: 50%; } >+.relativeWidth { width: 50%; } >+ >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and item with relative height</pre> >+ >+<div class="grid width300 alignItemsBaseline"> >+ <div class="firstRowFirstColumn relativeHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont" data-offset-x="100" data-offset-y="60" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 height25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with relative width</pre> >+ >+<div class="grid alignItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn relativeWidth" data-offset-x="30" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with rlative width</pre> >+ >+<div class="grid alignItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn relativeWidth" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingRight" data-offset-x="140" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ae18d4a8d9a4f8e58a63960db3dabf8ce641c408 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along column-axis on content-sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Grid items orthogonal to the Baseline Alignment Context should use their border-box 'under' edge as synthesized baseline."> >+<meta name="assert" content="Empty grid items with fixed size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: auto auto / 100px 200px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.fixedHeight { height: 125px; } >+.fixedWidth { width: 125px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and item with fixed height</pre> >+ >+<div class="grid width300 alignItemsBaseline"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="firstRowSecondColumn bigFont" data-offset-x="100" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 height25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with fixed width</pre> >+ >+<div class="grid alignItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="30" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with fixed width</pre> >+ >+<div class="grid alignItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="85" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="firstRowSecondColumn bigFont paddingRight" data-offset-x="25" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowAutoColumnSpanning2 width25"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009-expected.html >index a0ff682c6a5806e07ddd5271d846a2b4e47271a4..f3616f7d07ee12d7f634b8112a6f9e68c7225afb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009-expected.html >@@ -1,47 +1,34 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>CSS Grid Layout Reference: a square with a green bar</title> >+<title>CSS Grid Layout Reference: percentage grid gaps</title> > <link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk" /> > <style> >- #grid { >+ .grid { > width:200px; > height: 180px; > background-color: green; > position: relative; >+ margin-bottom: 30px; > } > >- #grid > div { >+ .grid > div { > background-color: silver; > width: 90px; > height: 90px; > position: absolute; > } >- >- #grid :nth-child(1) { >- top: 0; >- left: 0; >- } >- >- #grid :nth-child(2) { >- top: 0; >- left: 110px; >- } >- >- #grid :nth-child(3) { >- top: 90px; >- left: 0; >- } >- >- #grid :nth-child(4) { >- top: 90px; >- left: 110px; >- } > </style> > >-<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.</p> >-<div id="grid"> >- <div></div> >- <div></div> >- <div></div> >- <div></div> >+<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should be percentage of height.</p> >+<div class="grid"> >+ <div style="top:0; left:0"></div> >+ <div style="top:0; left:110px"></div> >+ <div style="top:108px; left:0"></div> >+ <div style="top:108px; left:110px"></div> >+</div> >+<div class="grid" style="height:200px"> >+ <div style="top:0; left:0"></div> >+ <div style="top:0; left:120px"></div> >+ <div style="top:120px; left:0"></div> >+ <div style="top:120px; left:120px"></div> > </div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html >index 98c230fb5bf573678969831591ecab8a8fb049a7..dfc595f8204c25fec8947967df746336d07d7eaa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html >@@ -1,9 +1,9 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>CSS Grid Layout Test: Support for percentage values for gap with no defined height for the grid</title> >+<title>CSS Grid Layout Test: Support for percentage values for gap with indefinite percentage basis</title> > <link rel="help" href="https://www.w3.org/TR/css-grid-1/#gutters"> > <link rel="help" href="https://www.w3.org/TR/css-align-3/#gap-shorthand"> >-<link rel="match" href="../reference/grid-collapsed-row-gutters-ref.html"> >+<link rel="match" href="../reference/grid-percentage-gap-ref.html"> > <link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk"> > <style> > #grid { >@@ -13,6 +13,7 @@ > grid-template-columns: 90px 90px; > grid-template-rows: 90px 90px; > background-color: green; >+ margin-bottom: 30px; > } > > #grid > div { >@@ -20,10 +21,16 @@ > } > </style> > >-<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.</p> >+<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should be percentage of height.</p> > <div id="grid"> > <div></div> > <div></div> > <div></div> > <div></div> >-</div> >\ No newline at end of file >+</div> >+<div id="grid" style="display:inline-grid; width:auto; gap:calc(20px + 5%)"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html >index a0ff682c6a5806e07ddd5271d846a2b4e47271a4..f3616f7d07ee12d7f634b8112a6f9e68c7225afb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html >@@ -1,47 +1,34 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>CSS Grid Layout Reference: a square with a green bar</title> >+<title>CSS Grid Layout Reference: percentage grid gaps</title> > <link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk" /> > <style> >- #grid { >+ .grid { > width:200px; > height: 180px; > background-color: green; > position: relative; >+ margin-bottom: 30px; > } > >- #grid > div { >+ .grid > div { > background-color: silver; > width: 90px; > height: 90px; > position: absolute; > } >- >- #grid :nth-child(1) { >- top: 0; >- left: 0; >- } >- >- #grid :nth-child(2) { >- top: 0; >- left: 110px; >- } >- >- #grid :nth-child(3) { >- top: 90px; >- left: 0; >- } >- >- #grid :nth-child(4) { >- top: 90px; >- left: 110px; >- } > </style> > >-<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.</p> >-<div id="grid"> >- <div></div> >- <div></div> >- <div></div> >- <div></div> >+<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should be percentage of height.</p> >+<div class="grid"> >+ <div style="top:0; left:0"></div> >+ <div style="top:0; left:110px"></div> >+ <div style="top:108px; left:0"></div> >+ <div style="top:108px; left:110px"></div> >+</div> >+<div class="grid" style="height:200px"> >+ <div style="top:0; left:0"></div> >+ <div style="top:0; left:120px"></div> >+ <div style="top:120px; left:0"></div> >+ <div style="top:120px; left:120px"></div> > </div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html >index 6b96fc25a9e253365e768c0e72da311999a367ec..22be6df72e8cb7f953eae294c994e6171693ad57 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html >@@ -1,9 +1,9 @@ > <!DOCTYPE html> > <meta charset="utf-8"> >-<title>CSS Grid Layout Test: Support for percentage values for grid-gap with no defined height for the grid as alias for gap</title> >+<title>CSS Grid Layout Test: Support for percentage values for grid-gap with indefinite percentage basis</title> > <link rel="help" href="https://www.w3.org/TR/css-grid-1/#gutters"> > <link rel="help" href="https://www.w3.org/TR/css-align-3/#gap-shorthand"> >-<link rel="match" href="../reference/grid-collapsed-row-gutters-ref.html"> >+<link rel="match" href="../reference/grid-percentage-gap-ref.html"> > <link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk"> > <style> > #grid { >@@ -13,6 +13,7 @@ > grid-template-columns: 90px 90px; > grid-template-rows: 90px 90px; > background-color: green; >+ margin-bottom: 30px; > } > > #grid > div { >@@ -20,10 +21,16 @@ > } > </style> > >-<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should resolve to auto, and therefore collapse to 0 height.</p> >+<p>The test passes if it has the same visual effect as reference. Column gap should be percentage of width. Row gap should be percentage of height.</p> > <div id="grid"> > <div></div> > <div></div> > <div></div> > <div></div> >-</div> >\ No newline at end of file >+</div> >+<div id="grid" style="display:inline-grid; width:auto; grid-gap:calc(20px + 5%)"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..57d27ff3aaea88eaeeed6f34f8ac49623b409fd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011-expected.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Reference: a square with a green cross</title> >+<link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk" /> >+<style> >+ #grid { >+ width:200px; >+ height: 220px; >+ background-color: green; >+ position: relative; >+ } >+ >+ #grid > div { >+ background-color: silver; >+ width: 90px; >+ height: 90px; >+ position: absolute; >+ } >+ >+ #grid :nth-child(1) { >+ top: 0; >+ left: 0; >+ } >+ >+ #grid :nth-child(2) { >+ top: 0; >+ left: 110px; >+ } >+ >+ #grid :nth-child(3) { >+ top: 130px; >+ left: 0; >+ } >+ >+ #grid :nth-child(4) { >+ top: 130px; >+ left: 110px; >+ } >+</style> >+ >+<p>The test passes if it has the same visual effect as reference.</p> >+<div id="grid"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..daeba00aee1fcabba3103c476beea9692ea7754d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Support for calc mixing fixed and percentage values for gap</title> >+<link rel="help" href="https://www.w3.org/TR/css-grid-1/#gutters"> >+<link rel="help" href="https://www.w3.org/TR/css-align-3/#gap-shorthand"> >+<link rel="match" href="../reference/grid-different-gutters-ref.html"> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<style> >+ #grid { >+ display: grid; >+ width: 200px; >+ height: 220px; >+ gap: calc(15% + 7px) calc(10px + 5%); >+ grid-template-columns: 90px 90px; >+ grid-template-rows: 90px 90px; >+ background-color: green; >+ } >+ >+ #grid > div { >+ background-color: silver; >+ } >+</style> >+ >+<p>The test passes if it has the same visual effect as reference.</p> >+<div id="grid"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..57d27ff3aaea88eaeeed6f34f8ac49623b409fd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012-expected.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Reference: a square with a green cross</title> >+<link rel="author" title="Rachel Andrew" href="mailto:me@rachelandrew.co.uk" /> >+<style> >+ #grid { >+ width:200px; >+ height: 220px; >+ background-color: green; >+ position: relative; >+ } >+ >+ #grid > div { >+ background-color: silver; >+ width: 90px; >+ height: 90px; >+ position: absolute; >+ } >+ >+ #grid :nth-child(1) { >+ top: 0; >+ left: 0; >+ } >+ >+ #grid :nth-child(2) { >+ top: 0; >+ left: 110px; >+ } >+ >+ #grid :nth-child(3) { >+ top: 130px; >+ left: 0; >+ } >+ >+ #grid :nth-child(4) { >+ top: 130px; >+ left: 110px; >+ } >+</style> >+ >+<p>The test passes if it has the same visual effect as reference.</p> >+<div id="grid"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1e56e708dfb45f1dd1e48d7779818d244eb25f3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Support for calc mixing fixed and percentage values for grid-gap as alias for gap</title> >+<link rel="help" href="https://www.w3.org/TR/css-grid-1/#gutters"> >+<link rel="help" href="https://www.w3.org/TR/css-align-3/#gap-shorthand"> >+<link rel="help" href0"https://www.w3.org/TR/css-align-3/#gap-legacy"> >+<link rel="match" href="../reference/grid-different-gutters-ref.html"> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<style> >+ #grid { >+ display: grid; >+ width: 200px; >+ height: 220px; >+ grid-gap: calc(15% + 7px) calc(10px + 5%); >+ grid-template-columns: 90px 90px; >+ grid-template-rows: 90px 90px; >+ background-color: green; >+ } >+ >+ #grid > div { >+ background-color: silver; >+ } >+</style> >+ >+<p>The test passes if it has the same visual effect as reference.</p> >+<div id="grid"> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..216aebb31dd892a995dafe1aca2ab40bbdfc4a42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html >@@ -0,0 +1,75 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Alignment along row axis of stcky positioned items</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Sticky positioned grid items are aligned correcly."> >+<style> >+.container { >+ border: solid 1px; >+ overflow: auto; >+ width: 500px; >+} >+.grid { >+ position: relative; >+ display: grid; >+ grid-template-columns: 100px 100px 100px 300px; >+ grid-template-rows: 75px 75px 75px 75px; >+ background: grey; >+ width: 400px; >+ margin-bottom: 20px; >+} >+.sticky { >+ position: -webkit-sticky; >+ position: -webkit-sticky; >+ width: 20px; >+ height: 20px; >+ background-color: #cae8ca; >+} >+.item1 { >+ left: 0px; >+ grid-column: 1; >+ grid-row: 1; >+} >+.item2 { >+ left: 0px; >+ grid-column: 2; >+ grid-row: 2; >+} >+.item3 { >+ left: 0px; >+ grid-column: 3; >+ grid-row: 3; >+} >+.item4 { >+ grid-column: 4; >+ grid-row: 4; >+ background: lightgrey; >+} >+.scroll { overflow: auto; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div class="container"> >+ <div style="width: 30px; float:left; height: 10px;"></div> >+ <div class="grid"> >+ <div class="item1 sticky justifySelfStart" data-offset-x="0" data-offset-y="0"></div> >+ <div class="item2 sticky justifySelfCenter" data-offset-x="140" data-offset-y="75"></div> >+ <div class="item3 sticky justifySelfEnd" data-offset-x="280" data-offset-y="150"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="width: 30px; float:left; height: 10px;"></div> >+ <div class="grid scroll"> >+ <div class="item1 sticky justifySelfStart" data-offset-x="0" data-offset-y="0"></div> >+ <div class="item2 sticky justifySelfCenter" data-offset-x="140" data-offset-y="75"></div> >+ <div class="item3 sticky justifySelfEnd" data-offset-x="280" data-offset-y="150"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="width: 2000px; height: 10px;"></div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..055aaf579fbcb97169a4814e0b9203b3c947dbfe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html >@@ -0,0 +1,75 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Alignment along row axis of stcky positioned items</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-self"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Sticky positioned grid items are aligned correcly, but preserving non-static positions when required."> >+<style> >+.container { >+ border: solid 1px; >+ overflow: auto; >+ width: 500px; >+} >+.grid { >+ position: relative; >+ display: grid; >+ grid-template-columns: 100px 100px 100px 300px; >+ grid-template-rows: 75px 75px 75px 75px; >+ background: grey; >+ width: 400px; >+ margin-bottom: 20px; >+} >+.sticky { >+ position: -webkit-sticky; >+ position: -webkit-sticky; >+ width: 20px; >+ height: 20px; >+ background-color: #cae8ca; >+} >+.item1 { >+ left: 40px; >+ grid-column: 1; >+ grid-row: 1; >+} >+.item2 { >+ left: 100px; >+ grid-column: 2; >+ grid-row: 2; >+} >+.item3 { >+ left: 290px; >+ grid-column: 3; >+ grid-row: 3; >+} >+.item4 { >+ grid-column: 4; >+ grid-row: 4; >+ background: lightgrey; >+} >+.scroll { overflow: auto; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+<div class="container"> >+ <div style="width: 30px; float:left; height: 10px;"></div> >+ <div class="grid"> >+ <div class="item1 sticky justifySelfStart" data-offset-x="10" data-offset-y="0"></div> >+ <div class="item2 sticky justifySelfCenter" data-offset-x="140" data-offset-y="75"></div> >+ <div class="item3 sticky justifySelfEnd" data-offset-x="280" data-offset-y="150"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="width: 30px; float:left; height: 10px;"></div> >+ <div class="grid scroll"> >+ <div class="item1 sticky justifySelfStart" data-offset-x="40" data-offset-y="0"></div> >+ <div class="item2 sticky justifySelfCenter" data-offset-x="140" data-offset-y="75"></div> >+ <div class="item3 sticky justifySelfEnd" data-offset-x="290" data-offset-y="150"></div> >+ <div class="item4"></div> >+ </div> >+ <div style="width: 2000px; height: 10px;"></div> >+</div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..80dad8fc2d98f03f1944f4406ea86ad043ad803d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html >@@ -0,0 +1,69 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along row-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Grid items orthogonal to the Baseline Alignment Context should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.container { position: relative; } >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 100px 200px / 200px 100px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width200 { width: 200px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 25px; } >+.paddingRight { padding-right: 25px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and verticalRL item</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn" data-offset-x="60" data-offset-y="0" data-expected-width="200" data-expected-height="100">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="secondRowFirstColumn bigFont paddingRight verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="125" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>Horizontal grid and verticalLR item</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn" data-offset-x="35" data-offset-y="0" data-expected-width="200" data-expected-height="100">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="secondRowFirstColumn bigFont paddingLeft verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="125" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>VerticalLR grid and Horizontal item</pre> >+ >+<div class="grid justifyItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="200">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="100" data-offset-y="160" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+<pre>VerticalLR grid and Horizontal item</pre> >+ >+<div class="grid justifyItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="200">Ãà à ÃÃà à Ãà Ã</div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="0" data-offset-y="160" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d58fd15e3a78a63a152f1f4e62e0b4dee45b42fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along row-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Empty grid items with fixed size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.container { position: relative; } >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 100px 200px / 200px 100px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width200 { width: 200px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.fixedHeight { height: 125px; } >+.fixedWidth { width: 125px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and verticalLR item with fixed width</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="30" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingLeft verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>Horizontal grid and verticalRL item with fixed width</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="60" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingRight verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with fixed height</pre> >+ >+<div class="grid justifyItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="100" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with fixed width</pre> >+ >+<div class="grid justifyItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="0" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cbe3dcfc4f471982e728a3eadb8292fbf31380b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along row-axis on fixed sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Empty grid items with relative size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.container { position: relative; } >+.grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 100px 200px / 200px 100px; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width200 { width: 200px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.relativeHeight { height: 50%; } >+.relativeWidth { width: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>Horizontal grid and verticalLR item with relative width</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn relativeWidth" data-offset-x="30" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingLeft verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>Horizontal grid and verticalRL item with relative width</pre> >+ >+<div class="grid width300 justifyItemsBaseline"> >+ <div class="firstRowFirstColumn relativeWidth" data-offset-x="60" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingRight verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with relative height</pre> >+ >+<div class="grid justifyItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn relativeHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="100" data-offset-y="60" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with relative height</pre> >+ >+<div class="grid justifyItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn relativeHeight" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="0" data-offset-y="60" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0902ca2b86dd091a50257604a9dab825e453d47e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment along row-axis on content-sized grids and synthesized baselines</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Empty grid items with fixed size should use their border-box 'under' edge as synthesized baseline."> >+<style> >+.container { position: relative; } >+.inline-grid { >+ position: relative; >+ -webkit-text-orientation: sideways; >+ grid: 100px 200px / auto auto; >+ font-family: Ahem; >+} >+.bigFont { font-size: 50px; } >+.height25 { height: 25px; } >+.width25 { width: 25px; } >+.width200 { width: 200px; } >+.width300 { width: 300px; } >+ >+.paddingLeft { padding-left: 20px; } >+.paddingRight { padding-right: 20px; } >+ >+.fixedHeight { height: 125px; } >+.fixedWidth { width: 125px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.inline-grid')"> >+ >+<pre>Horizontal grid and verticalLR item with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline" data-expected-width="180" data-expected-height="300"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="30" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingLeft verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>Horizontal grid and verticalRL item with fixed width</pre> >+ >+<div class="inline-grid justifyItemsBaseline" data-expected-width="210" data-expected-height="300"> >+ <div class="firstRowFirstColumn fixedWidth" data-offset-x="60" data-offset-y="0" data-expected-width="125" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn bigFont paddingRight verticalRL" data-offset-x="0" data-offset-y="100" data-expected-width="120" data-expected-height="200">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn width25"></div> >+</div> >+ >+<pre>VerticalLR grid and item with fixed height</pre> >+ >+<div class="inline-grid justifyItemsBaseline verticalLR"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="100" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+<pre>VerticalRL grid and item with fixed height</pre> >+ >+<div class="inline-grid justifyItemsBaseline verticalRL"> >+ <div class="firstRowFirstColumn fixedHeight" data-offset-x="200" data-offset-y="0" data-expected-width="100" data-expected-height="125"></div> >+ <div class="secondRowFirstColumn bigFont horizontalTB" data-offset-x="0" data-offset-y="85" data-expected-width="200" data-expected-height="100">à à ÃÃ</div> >+ <div class="autoRowSpanning2AutoColumn height25"></div> >+</div> >+ >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1de54774f0a1e193685f3066dcc3a2f1537cd71e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html >@@ -0,0 +1,128 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment and sizing cyclic dependency</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Grid items with relative size in the inline or block axis and an intrinsically-sized column or row respectively, don't participate in baseline alignment in the, row-like or column-like respectively, shared alignment context."> >+<style> >+.inline-grid { >+ position: relative; >+ border: solid; >+ -webkit-text-orientation: sideways; >+ font-family: Ahem; >+} >+ >+.columns { grid-template-columns: 100px 100px; } >+.rows { grid-template-rows: 100px 100px; } >+ >+.min-content-columns { grid-auto-columns: min-content; } >+.max-content-columns { grid-auto-columns: max-content; } >+.fit-content-columns { grid-auto-columns: fit-content; } >+.flex-columns { grid-auto-columns: 1fr; } >+.min-content-rows { grid-auto-rows: min-content; } >+.max-content-rows { grid-auto-rows: max-content; } >+.fit-content-rows { grid-auto-rows: fit-content; } >+.flex-rows { grid-auto-rows: 1fr; } >+ >+.height25 { height: 25px; } >+.height50 { height: 50px; } >+.height200 { height: 200px; } >+.width25 { width: 25px; } >+.width50 { width: 50px; } >+.width200 { width: 200px; } >+ >+.height200Percent { height: 200%; } >+.width200Percent { width: 200%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.inline-grid')"> >+ >+<pre>auto-sized rows - items with relative height</pre> >+ >+<div class="inline-grid alignItemsBaseline columns"> >+ <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> >+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>min-content-sized rows - items with relative height</pre> >+ >+<div class="inline-grid alignItemsBaseline columns min-content-rows"> >+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>max-content-sized rows - items with relative height</pre> >+ >+<div class="inline-grid alignItemsBaseline columns max-content-rows"> >+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>fit-content-sized rows - items with relative height</pre> >+ >+<div class="inline-grid alignItemsBaseline columns fit-content-rows"> >+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>flexible-sized rows - items with relative height</pre> >+ >+<div class="inline-grid alignItemsBaseline columns flex-rows"> >+ <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div> >+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>auto-sized columns - items with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows"> >+ <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> >+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>min-content-sized columns - items with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows min-content-columns"> >+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> >+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>max-content-sized columns - items with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows max-content-columns"> >+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> >+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>fit-content-sized columns - items with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows fit-content-columns"> >+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div> >+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>flexible-sized columns - items with relative width</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows flex-columns"> >+ <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div> >+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div> >+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2cbfbaf4df4fefe27398637ead7defc567ba552a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html >@@ -0,0 +1,178 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Self-Baseline alignment and sizing cyclic dependency</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment"> >+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline"> >+<link rel="stylesheet" href="../../support/grid.css"> >+<link rel="stylesheet" href="../../support/alignment.css"> >+<meta name="assert" content="Grid items orthogonal to the Baseline Context along the inline or block axis and an intrinsically-sized column or row respectively, don't participate in baseline alignment in the, row-like or column-like respectively, shared alignment context."> >+<style> >+.inline-grid { >+ position: relative; >+ border: solid; >+ -webkit-text-orientation: sideways; >+ font-family: Ahem; >+} >+ >+.columns { grid-template-columns: 100px 100px; } >+.rows { grid-template-rows: 100px 100px; } >+ >+.min-content-columns { grid-auto-columns: min-content; } >+.max-content-columns { grid-auto-columns: max-content; } >+.fit-content-columns { grid-auto-columns: fit-content; } >+.flex-columns { grid-auto-columns: 1fr; } >+.min-content-rows { grid-auto-rows: min-content; } >+.max-content-rows { grid-auto-rows: max-content; } >+.fit-content-rows { grid-auto-rows: fit-content; } >+.flex-rows { grid-auto-rows: 1fr; } >+ >+.height25 { height: 25px; } >+.height50 { height: 50px; } >+.height200 { height: 200px; } >+.width25 { width: 25px; } >+.width50 { width: 50px; } >+.width200 { width: 200px; } >+ >+.bigFont { font-size: 50px; } >+.paddingLeft { padding-left: 25px; } >+.paddingBottom { padding-bottom: 25px; } >+.paddingRight { padding-right: 25px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.inline-grid')"> >+ >+<pre>auto-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> >+ >+<div class="inline-grid alignItemsBaseline columns height200"> >+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">Ã</div> >+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="175">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="175" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>min-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> >+ >+<div class="inline-grid alignItemsBaseline columns min-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">Ã</div> >+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="75">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="75" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>max-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> >+ >+<div class="inline-grid alignItemsBaseline columns max-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">Ã</div> >+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>fit-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre> >+ >+<div class="inline-grid alignItemsBaseline columns fit-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">Ã</div> >+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div> >+</div> >+ >+<pre>auto-sized columns - horizontal grid item - row-axis baseline</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows width200"> >+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="175" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>min-content-sized columns - horizontal grid item - row-axis baseline</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows min-content-columns"> >+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="75" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>max-content-sized columns - horizontal grid item - row-axis baseline</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows max-content-columns"> >+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>fit-content-sized columns - horizontal grid item - row-axis baseline</pre> >+ >+<div class="inline-grid justifyItemsBaseline rows fit-content-columns"> >+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>auto-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalLR alignItemsBaseline columns width200"> >+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="175" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>min-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalLR alignItemsBaseline columns min-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="75" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>max-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalLR alignItemsBaseline columns max-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>fit-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalLR alignItemsBaseline columns fit-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>auto-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalRL alignItemsBaseline columns width200"> >+ <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="175" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>min-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalRL alignItemsBaseline columns min-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="25" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="75" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>max-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalRL alignItemsBaseline columns max-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >+ >+<pre>fit-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre> >+ >+<div class="inline-grid verticalRL alignItemsBaseline columns fit-content-rows"> >+ <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">Ã</div> >+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">Ãà à Ãà ÃÃÃà à Ãà ÃÃà Ãà Ã</div> >+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/w3c-import.log >index 31568e30eba929f792e2ef30494027da01a400e9..88d324291b6d8d3ffba9de6c21a46671bfb65034 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/w3c-import.log >@@ -9,7 +9,7 @@ Do NOT modify or remove this file. > > ------------------------------------------------------------------------ > Properties requiring vendor prefixes: >-None >+text-orientation > Property values requiring vendor prefixes: > sticky > ------------------------------------------------------------------------ >@@ -67,6 +67,12 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-alignment-sticky-positioned-items-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-004.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-distribution-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-distribution-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-distribution-002-expected.html >@@ -186,6 +192,10 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-009.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html >@@ -203,6 +213,12 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-alignment-sticky-positioned-items-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html >@@ -279,3 +295,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-014.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-015.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-alignment-stretch-vertical-rl-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..db88ce54b38badc1277661af913303942d63ece0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Test: Anonymous grid items - non-contiguous text runs - position:absolute</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-grid/#grid-items"> >+<link rel="match" href="/css/css-flexbox/anonymous-flex-item-split-ref.html"> >+<p>The words "Two" and "lines" should not be on the same line.</p> >+<div style="display:grid">Two <span style="position:absolute"></span>lines</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82fcaa3b2aa4a271db14feb00256d0aedbce2d85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table-expected.html >@@ -0,0 +1,4 @@ >+<!DOCTYPE html> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<p>Test passes if there is a filled green square.</p> >+<div style="width:100px; height:100px; background:green;"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html >new file mode 100644 >index 0000000000000000000000000000000000000000..53a0979622cdc757e3ab77b98d712c727cec4901 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Grid Layout Test: Explicitly sized grid item as table with narrow contents</title> >+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> >+<link rel="help" href="https://www.w3.org/TR/css-grid-1/#grid-track-concept" title="3.2. Grid Tracks and Cells"> >+<meta name="assert" content="A grid item as a table uses the sizing algorithm of the grid"> >+<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> >+<p>Test passes if there is a filled green square.</p> >+<div style="display:grid; grid-template-columns:50% 50%; width:200px;"> >+ <div style="display:table; background:green;"> >+ <div style="width:10px; height:100px;"></div> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f50e9ef312418f4d3b737bd55b4a7e5c75f09230 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html >@@ -0,0 +1,49 @@ >+<!DOCTYPE html> >+<title>CSS Grid Test: computed style for auto minimum size</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org" /> >+<link rel="help" href="https://drafts.csswg.org/css-grid/#min-size-auto" /> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ .grid { display: grid } >+ .none { display: none } >+ .min-wh { >+ min-width: auto; >+ min-height: auto; >+ } >+ .contents { display: contents } >+</style> >+<div class="grid"> >+ <div class="min-wh"></div> >+</div> >+<div class="none"> >+ <div class="grid"> >+ <div class="min-wh"></div> >+ </div> >+</div> >+<div class="grid"> >+ <div class="contents"> >+ <div class="min-wh"></div> >+ </div> >+</div> >+<div class="grid"> >+ <div class="min-wh none"></div> >+</div> >+<script> >+ const tests = [ >+ { description: "Computed min-width/min-height of specified auto for grid item.", computed: "auto" }, >+ { description: "Computed min-width/min-height of specified auto inside display:none which would otherwise have been a grid item.", computed: "0px" }, >+ { description: "Computed min-width/min-height of specified auto for grid item inside display:contents.", computed: "auto" }, >+ { description: "Computed min-width/min-height of specified auto with display:none which would otherwise have been a grid item.", computed: "0px" } >+ ]; >+ >+ const testElements = document.querySelectorAll(".min-wh"); >+ let testNo = 0; >+ for (let testElement of testElements) { >+ test(() => { >+ assert_equals(getComputedStyle(testElement).minWidth, tests[testNo].computed); >+ assert_equals(getComputedStyle(testElement).minHeight, tests[testNo].computed); >+ }, tests[testNo].description); >+ testNo++; >+ } >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..00487f766a7b0dbd4a35e6910ce16f7cffd00eef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-001.html >@@ -0,0 +1,349 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with definite width."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ width: 100px; >+ border: solid thick; >+ grid: 10px 10px / minmax(auto, 0px); >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c9f77a6ebe09568ce4166a978ddbfff1e1a37db7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-002.html >@@ -0,0 +1,349 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with indefinite width."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px; >+ grid: 10px 10px / minmax(auto, 0px); >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..943837d2031c5046038e8078ed3b937a04e477bb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html >@@ -0,0 +1,349 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items orthogonal</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that orthogonal grid items minimum width takes into account borders, padding and margins for grid containers with definite width."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ width: 100px; >+ border: solid thick; >+ grid: 10px 10px / minmax(auto, 0px); >+} >+ >+.grid > div:nth-child(1) { background: cyan; writing-mode: vertical-lr; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..25ad710d5d2f3c25e0f391edc8dddd49b4307e48 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html >@@ -0,0 +1,349 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items orthogonal</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that orthogonal grid items minimum width takes into account borders, padding and margins for grid containers with indefinite width."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px; >+ grid: 10px 10px / minmax(auto, 0px); >+} >+ >+.grid > div:nth-child(1) { background: cyan; writing-mode: vertical-lr; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1afe6df9535079fb6deaf75e88eb2846490b6759 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html >@@ -0,0 +1,350 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with definite width in vertical-lr."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ width: 100px; >+ border: solid thick; >+ grid: minmax(auto, 0px) / 10px 10px; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a239369e4d9e8adce8697174ab2a53301964cea7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html >@@ -0,0 +1,350 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with indefinite width in vertical-lr."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px; >+ grid: minmax(auto, 0px) / 10px 10px; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..df3fe9bca499fba68f0bc0914c4dad8cecca3451 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html >@@ -0,0 +1,350 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with definite width in vertical-rl."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ width: 100px; >+ border: solid thick; >+ grid: minmax(auto, 0px) / 10px 10px; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3978ed607b7f2d685188b9582f4381aa439da2b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html >@@ -0,0 +1,350 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Mininum width of grid items vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<meta name="assert" content="Checks that grid items minimum width takes into account borders, padding and margins for grid containers with indefinite width in vertical-rl."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px; >+ grid: minmax(auto, 0px) / 10px 10px; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { background: magenta; } >+ >+.width60 { width: 60px; } >+.minWidth60 { min-width: 60px; } >+ >+.marginLeft5 { margin-left: 5px; } >+.marginRight10 { margin-right: 10px; } >+ >+.paddingLeft6 { padding-left: 6px; } >+.paddingRight3 { padding-right: 3px; } >+ >+.borderLeft2, .borderRight4 { border: solid yellow 0px; } >+.borderLeft2 { border-left-width: 2px; } >+.borderRight4 { border-right-width: 4px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="width60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item min-width: 60px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="70"> >+ <div class="minWidth60" data-expected-width="60"></div> >+ <div data-expected-width="60"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="width60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="75"> >+ <div class="minWidth60 marginLeft5" data-expected-width="60"></div> >+ <div data-expected-width="65"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="width60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="80"> >+ <div class="minWidth60 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="70"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="width60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="85"> >+ <div class="minWidth60 marginLeft5 marginRight10" data-expected-width="60"></div> >+ <div data-expected-width="75"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 paddingLeft6" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="width60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="73"> >+ <div class="minWidth60 paddingRight3" data-expected-width="63"></div> >+ <div data-expected-width="63"></div> >+</div> >+ >+<pre>Item width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="width60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item min-width: 60px; & padding-left: 6px; & padding-right: 3px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="79"> >+ <div class="minWidth60 paddingLeft6 paddingRight3" data-expected-width="69"></div> >+ <div data-expected-width="69"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="width60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="72"> >+ <div class="minWidth60 borderLeft2" data-expected-width="62"></div> >+ <div data-expected-width="62"></div> >+</div> >+ >+<pre>Item width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="width60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="74"> >+ <div class="minWidth60 borderRight4" data-expected-width="64"></div> >+ <div data-expected-width="64"></div> >+</div> >+ >+<pre>Item width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="width60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item min-width: 60px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="76"> >+ <div class="minWidth60 borderLeft2 borderRight4" data-expected-width="66"></div> >+ <div data-expected-width="66"></div> >+</div> >+ >+<pre>Item width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="width60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >+ >+<pre>Item min-width: 60px; & margin-left: 5px; & margin-right: 10px; & padding-left: 6px; & padding-right: 3px; & border-left-width: 2px; & border-right-width: 4px;</pre> >+ >+<div class="grid directionRTL" data-expected-width="100"> >+ <div class="minWidth60 marginLeft5 marginRight10 paddingLeft6 paddingRight3 borderLeft2 borderRight4" data-expected-width="75"></div> >+ <div data-expected-width="90"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..118440912de1d0f1c7d397a538e57bc8fca94476 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html >@@ -0,0 +1,95 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track)."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ width: 500px; >+ justify-items: start; >+ position: relative; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 100%; >+ height: 10px; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b056d3edf53105d73d175bbb9b3c0043274a4ae2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html >@@ -0,0 +1,95 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min)."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ width: 500px; >+ justify-items: start; >+ position: relative; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 100%; >+ height: 10px; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82df77ffca78a35742c1947b37fed3097a4e2653 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track) in a vertical-lr grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..168eeaf28c24cc7a1331023fd528c86fc3bf3676 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-lr grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..415a07df172431b032278751de0752b4845d1d51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a fixed size track) in a vertical-rl grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="60" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="10" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-expected-x="60" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-expected-x="10" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-expected-y="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-expected-y="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6f3db26275c82d5b2497f8f32964b5c2b8886bf2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage margins vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage margins are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-rl grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.marginLeft50Percent { margin-left: 50%; } >+.marginRight50Percent { margin-right: 50%; } >+.marginTop50Percent { margin-top: 50%; } >+.marginBottom50Percent { margin-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-offset-x="60" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-offset-x="10" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-offset-y="50" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-offset-y="0" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item margin-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginLeft50Percent" data-expected-margin-left="50" data-expected-x="60" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginRight50Percent" data-expected-margin-right="50" data-expected-x="10" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginTop50Percent" data-expected-margin-top="50" data-expected-y="490" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item margin-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="marginBottom50Percent" data-expected-margin-bottom="50" data-expected-y="440" data-expected-width="10" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3989d8f5c69a91e0bc3dd44c86331cbdd99766c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html >@@ -0,0 +1,95 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track)."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ width: 500px; >+ justify-items: start; >+ position: relative; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 100%; >+ height: 10px; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a358b38b3d97754e061925536c7c064975ad16d9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html >@@ -0,0 +1,95 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min)."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ width: 500px; >+ justify-items: start; >+ position: relative; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 100%; >+ height: 10px; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="400" data-offset-y="10" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="400" data-offset-y="60" data-expected-width="100" data-expected-height="10"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..21ed53a2c70811c2c0effc05a8447a8571041287 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track) in a vertical-lr grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d4d8aa29d7ad7933e6c26879c416a8efbbf8b05a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings vertical-lr</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-lr grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-lr; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="60" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="10" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..010f4b5fbd232261108524b1115af4512b28143c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a fixed size track) in a vertical-rl grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: 100px; >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bf38155e16f26f00e8243f32fc7a2d15fd62b2e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html >@@ -0,0 +1,96 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Grid items with percentage paddings vertical-rl</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#item-margins"> >+<meta name="assert" content="Checks grid items percentage paddings are resolved against the inline size of their grid area (in a track with fixed max sizing function and intrinsic min) in a vertical-rl grid container."> >+<link rel="stylesheet" href="support/grid.css"> >+<style> >+.grid { >+ font: 10px/1 Ahem; >+ grid-template-columns: minmax(auto, 100px); >+ height: 500px; >+ justify-items: start; >+ position: relative; >+ writing-mode: vertical-rl; >+} >+ >+.grid > div:nth-child(1) { background: cyan; } >+.grid > div:nth-child(2) { >+ background: magenta; >+ width: 10px; >+ height: 100%; >+} >+ >+.paddingLeft50Percent { padding-left: 50%; } >+.paddingRight50Percent { padding-right: 50%; } >+.paddingTop50Percent { padding-top: 50%; } >+.paddingBottom50Percent { padding-bottom: 50%; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid')"> >+ >+<div id="log"></div> >+ >+<h3>Direction LTR</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="0" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<h3>Direction RTL</h3> >+ >+<pre>Item padding-left: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingLeft50Percent" data-expected-padding-left="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-right: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingRight50Percent" data-expected-padding-right="50" data-expected-width="60" data-expected-height="10">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-top: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingTop50Percent" data-expected-padding-top="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >+ >+<pre>Item padding-bottom: 50%;</pre> >+ >+<div class="grid directionRTL"> >+ <div class="paddingBottom50Percent" data-expected-padding-bottom="50" data-expected-width="10" data-expected-height="60">X</div> >+ <div data-offset-x="0" data-offset-y="400" data-expected-width="10" data-expected-height="100"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2c21c8c13dc6d24f50cf56de40c7cef2ddd7d17a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001-expected.html >@@ -0,0 +1,92 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Refttest Reference: Percentage size on child of a grid item with margin, border, padding and scrollbar</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<style> >+.grid { >+ display: inline-block; >+ border: solid 5px black; >+ width: 150px; >+ height: 100px; >+ margin: 10px; >+ vertical-align: top; >+} >+ >+.item { >+ overflow: scroll; >+ border: solid magenta; >+ border-width: 12px 9px 6px 3px; >+ margin: 1px 2px 3px 4px; >+ padding: 5px 15px 10px 20px; >+ background: cyan; >+ width: calc(100% - 6px); >+ height: calc(100% - 4px); >+ box-sizing: border-box; >+} >+ >+img { >+ width: 100%; >+ height: 100%; >+ display: block; >+} >+ >+.horizontalTB { writing-mode: horizontal-tb; } >+.verticalLR { writing-mode: vertical-lr; } >+.verticalRL { writing-mode: vertical-rl; } >+</style> >+ >+<p>The test passes if in the different examples you see scrollbars but there's no overflow, so you cannot actually scroll.</p> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img class="verticalLR" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img class="horizontalTB" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img class="horizontalTB" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..190277a1ed1e409540410eb43bf5be0d64c142cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html >@@ -0,0 +1,91 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Test: Percentage size on replaced child of a grid item with margin, border, padding and scrollbar</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<link rel="match" href="percentage-size-replaced-subitems-001-ref.html"> >+<meta name="assert" content="Checks that grid items replaced children resolve properly their percentage sizes, even when the grid item has margin, border, padding and scrollbar."> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px black; >+ grid: 100px / 150px; >+ margin: 10px; >+ vertical-align: top; >+} >+ >+.item { >+ overflow: scroll; >+ border: solid magenta; >+ border-width: 12px 9px 6px 3px; >+ margin: 1px 2px 3px 4px; >+ padding: 5px 15px 10px 20px; >+ background: cyan; >+} >+ >+img { >+ width: 100%; >+ height: 100%; >+ display: block; >+} >+ >+.horizontalTB { writing-mode: horizontal-tb; } >+.verticalLR { writing-mode: vertical-lr; } >+.verticalRL { writing-mode: vertical-rl; } >+</style> >+ >+<p>The test passes if in the different examples you see scrollbars but there's no overflow, so you cannot actually scroll.</p> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img class="verticalLR" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img class="horizontalTB" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img class="horizontalTB" src="support/100x100-green.png" /> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <img class="verticalRL" src="support/100x100-green.png" /> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..939504e81d27bbbcce237d863f758b3fa1594ef4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001-expected.html >@@ -0,0 +1,93 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Refttest Reference: Percentage size on child of a grid item with margin, border, padding and scrollbar</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<style> >+.grid { >+ display: inline-block; >+ border: solid 5px black; >+ width: 150px; >+ height: 100px; >+ margin: 10px; >+ vertical-align: top; >+} >+ >+.item { >+ overflow: scroll; >+ border: solid magenta; >+ border-width: 12px 9px 6px 3px; >+ margin: 1px 2px 3px 4px; >+ padding: 5px 15px 10px 20px; >+ background: cyan; >+ width: calc(100% - 6px); >+ height: calc(100% - 4px); >+ box-sizing: border-box; >+} >+ >+.subitem { >+ width: 100%; >+ height: 100%; >+ background: yellow; >+ font: 20px/1 Ahem; >+} >+ >+.horizontalTB { writing-mode: horizontal-tb; } >+.verticalLR { writing-mode: vertical-lr; } >+.verticalRL { writing-mode: vertical-rl; } >+</style> >+ >+<p>The test passes if in the different examples you see scrollbars but there's no overflow, so you cannot actually scroll.</p> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem verticalLR"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem verticalRL"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem horizontalTB"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem verticalRL"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem horizontalTB"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem verticalLR"></div> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ad009906191a268c4546b2129c3c0af2352ea318 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html >@@ -0,0 +1,91 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Test: Percentage size on child of a grid item with margin, border, padding and scrollbar</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-items"> >+<link rel="match" href="percentage-size-subitems-001-ref.html"> >+<meta name="assert" content="Checks that grid items children resolve properly their percentage sizes, even when the grid item has margin, border, padding and scrollbar."> >+<style> >+.grid { >+ display: inline-grid; >+ border: solid 5px black; >+ grid: 100px / 150px; >+ margin: 10px; >+ vertical-align: top; >+} >+ >+.item { >+ overflow: scroll; >+ border: solid magenta; >+ border-width: 12px 9px 6px 3px; >+ margin: 1px 2px 3px 4px; >+ padding: 5px 15px 10px 20px; >+ background: cyan; >+} >+ >+.subitem { >+ width: 100%; >+ height: 100%; >+ background: yellow; >+} >+ >+.horizontalTB { writing-mode: horizontal-tb; } >+.verticalLR { writing-mode: vertical-lr; } >+.verticalRL { writing-mode: vertical-rl; } >+</style> >+ >+<p>The test passes if in the different examples you see scrollbars but there's no overflow, so you cannot actually scroll.</p> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem verticalLR"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item horizontalTB"> >+ <div class="subitem verticalRL"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem horizontalTB"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalLR"> >+ <div class="subitem verticalRL"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem horizontalTB"></div> >+ </div> >+</div> >+ >+<div class="grid"> >+ <div class="item verticalRL"> >+ <div class="subitem verticalLR"></div> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/w3c-import.log >index fead944fb27c5361b2274ded5b0d5f9c09429301..cbba2e197292a307f1b575c0a5d4b5e92e3ab6fa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/w3c-import.log >@@ -14,6 +14,9 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-inline-items-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-inline-items-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-inline-items-002-expected.xht >@@ -72,6 +75,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-containing-block-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-containing-block-004-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-containing-block-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-002-expected.xht >@@ -80,6 +84,26 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-inline-blocks-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-inline-blocks-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-lr-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-vertical-rl-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-lr-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-vertical-rl-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-lr-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-sizing-alignment-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-sizing-alignment-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-layout-grid-in-grid-expected.html >@@ -175,4 +199,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-005.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-006-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-z-axis-ordering-overlapped-items-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-replaced-subitems-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/percentage-size-subitems-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-items/ref-filled-green-100px-square-image.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-layout-properties.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-layout-properties.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5945550d9c48096a03962dc58f81a6b69ff8de03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-layout-properties.html >@@ -0,0 +1,233 @@ >+<!DOCTYPE HTML> >+<html lang="en"> >+<head> >+ <meta charset="UTF-8"> >+ <title>CSS Test: Grid Layout - Properties exist</title> >+ <link rel="author" title="è´ºå¸ä¿" href="mailto:johnhax@gmail.com"> >+ <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com" /> >+ <link rel="reviewer" title="Dayang Shen" href="mailto:shendayang@baidu.com"> <!-- 2013-09-30 --> >+ <link rel="help" href="http://www.w3.org/TR/css-grid-1/#property-index"> >+ <meta name="flags" content="ahem dom"> >+ <meta name="assert" content="Test checks that css properties of grid layout exist."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ #container { >+ width: 800px; >+ height: 600px; >+ } >+ #myDiv { >+ font: 50px/1 Ahem; >+ justify-content: start; >+ align-content: start; >+ } >+ </style> >+</head> >+<body> >+ <div id="log"></div> >+ <div id="container"> >+ <div id="myDiv"> >+ <div>I T</div> >+ <div>IT</div> >+ <div>I</div> >+ </div> >+ </div> >+ >+ <script> >+ var myDiv = document.getElementById('myDiv') >+ >+ test(function(){ >+ myDiv.style.display = 'grid' >+ assert_equals(myDiv.style.display, 'grid', >+ 'display should be "grid"') >+ }, 'display: grid') >+ >+ test(function(){ >+ myDiv.style.display = 'inline-grid' >+ assert_equals(myDiv.style.display, 'inline-grid', >+ 'display should be "inline-grid"') >+ }, 'display: inline-grid') >+ >+ void function(data){ >+ >+ myDiv.style.display = 'grid' >+ >+ Object.keys(data).forEach(function(prop){ >+ test(function(){ >+ assert_true(prop in myDiv.style) >+ }, prop) >+ >+ if ('initial' in data[prop]) test(function(){ >+ var initial = data[prop].initial >+ delete data[prop].initial >+ assert_equals(getComputedStyle(myDiv)[prop], initial, 'initial value of ' + prop + ' should be ' + initial) >+ }, prop + '.initial') >+ >+ var syntaxTests = data[prop] >+ Object.keys(syntaxTests).forEach(function(testcase){ >+ test(function(){ >+ assert_true(prop in myDiv.style) >+ myDiv.style[prop] = syntaxTests[testcase][0] >+ assert_equals(myDiv.style[prop], syntaxTests[testcase][0], testcase) >+ assert_equals(getComputedStyle(myDiv)[prop], syntaxTests[testcase][1], testcase) >+ }, prop + '.' + testcase) >+ }) >+ }) >+ >+ }({ >+ 'grid-template-columns': { // named 'grid-definition-columns' in last draft >+ initial: '150px', >+ 'none': ['none', '150px'], >+ '<line-names>': ['[a] auto [b] auto [c]', '[a] 150px [b] 100px [c]'], >+ '<track-size>.auto': ['auto', '150px'], >+ '<track-size>.<track-breadth>.<length>': ['100px', '100px'], >+ '<track-size>.<track-breadth>.<percentage>': ['100%', '800px'], >+ '<track-size>.<track-breadth>.<flex>': ['1fr', '800px'], >+ '<track-size>.<track-breadth>.min-content': ['min-content', '100px'], >+ '<track-size>.<track-breadth>.max-content': ['max-content', '150px'], >+ '<track-size>.<track-breadth>.minmax()': ['minmax(100px, 200px)', '200px'], >+ 'reset': ['none', '150px'], >+ }, >+ 'grid-template-rows': { // named 'grid-definition-rows' in last draft >+ initial: '50px 50px 50px', >+ 'none': ['none', '50px 50px 50px'], >+ '<line-names>': ['[a] auto [b] auto [c]', '[a] 50px [b] 50px [c] 50px'], >+ '<track-size>.auto': ['auto', '50px 50px 50px'], >+ '<track-size>.<track-breadth>.<length>': ['100px', '100px 50px 50px'], >+ '<track-size>.<track-breadth>.<percentage>': ['100%', '50px 50px 50px'], >+ '<track-size>.<track-breadth>.<flex>': ['1fr', '50px 50px 50px'], >+ '<track-size>.<track-breadth>.min-content': ['min-content', '50px 50px 50px'], >+ '<track-size>.<track-breadth>.max-content': ['max-content', '50px 50px 50px'], >+ '<track-size>.<track-breadth>.minmax()': ['minmax(100px, 200px)', '200px 50px 50px'], >+ 'reset': ['none', '50px 50px 50px'], >+ }, >+ 'grid-template-areas': { >+ initial: 'none', >+ 'none': ['none', 'none'], >+ '<string>+': ['"a"', '"a"'], >+ 'reset': ['none', 'none'], >+ }, >+ 'grid-template': { >+ initial: '150px / 50px 50px 50px', >+ 'none': ['', '150px / 50px 50px 50px'], >+ '<grid-template-rows> / <grid-template-columns>': ['100px 100px / 200px 200px', '100px 100px / 200px 200px'], >+ '<line-names>': ['[a] auto [b] auto [c] / [d] auto [e] auto [f]', '[a] auto [b] auto [c] / [d] auto [e] auto [f]'], >+ '<string>+': ['"a b" "a b"', '"a b" "a b"'], >+ '<string><track-size>+': ['100px / "a b" 50px', '100px / "a b" 50px'], >+ 'reset': ['', '150px / 50px 50px 50px'], >+ }, >+ 'grid-auto-columns': { >+ initial: 'auto', >+ '<track-size>.auto': ['auto', 'auto'], >+ '<track-size>.<track-breadth>.<length>': ['100px', '100px'], >+ '<track-size>.<track-breadth>.<percentage>': ['100%', '100%'], >+ '<track-size>.<track-breadth>.<flex>': ['1fr', '1fr'], >+ '<track-size>.<track-breadth>.min-content': ['min-content', 'min-content'], >+ '<track-size>.<track-breadth>.max-content': ['max-content', 'max-content'], >+ '<track-size>.<track-breadth>.minmax()': ['minmax(100px, 200px)', 'minmax(100px, 200px)'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-auto-rows': { >+ initial: 'auto', >+ '<track-size>.auto': ['auto', 'auto'], >+ '<track-size>.<track-breadth>.<length>': ['100px', '100px'], >+ '<track-size>.<track-breadth>.<percentage>': ['100%', '100%'], >+ '<track-size>.<track-breadth>.<flex>': ['1fr', '1fr'], >+ '<track-size>.<track-breadth>.min-content': ['min-content', 'min-content'], >+ '<track-size>.<track-breadth>.max-content': ['max-content', 'max-content'], >+ '<track-size>.<track-breadth>.minmax()': ['minmax(100px, 200px)', 'minmax(100px, 200px)'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-auto-flow': { >+ initial: 'row', >+ 'row': ['row', 'row'], >+ 'column': ['column', 'column'], >+ 'dense': ['dense', 'row dense'], >+ 'row dense': ['row dense', 'row dense'], >+ 'column dense': ['column dense', 'column dense'], >+ 'reset': ['row', 'row'], >+ }, >+ 'grid-row-start': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a', 'a'], >+ '<integer>': ['1', '1'], >+ '<integer> <ident>': ['1 a', '1 a'], >+ 'span <integer>': ['span 1', 'span 1'], >+ 'span <custom-ident>': ['span a', 'span 1 a'], >+ 'span <integer> <custom-ident>': ['span 2 a', 'span 2 a'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-column-start': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a', 'a'], >+ '<integer>': ['1', '1'], >+ '<integer> <ident>': ['1 a', '1 a'], >+ 'span <integer>': ['span 1', 'span 1'], >+ 'span <custom-ident>': ['span a', 'span 1 a'], >+ 'span <integer> <custom-ident>': ['span 2 a', 'span 2 a'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-row-end': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a', 'a'], >+ '<integer>': ['1', '1'], >+ '<integer> <ident>': ['1 a', '1 a'], >+ 'span <integer>': ['span 1', 'span 1'], >+ 'span <custom-ident>': ['span a', 'span 1 a'], >+ 'span <integer> <custom-ident>': ['span 2 a', 'span 2 a'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-column-end': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a', 'a'], >+ '<integer>': ['1', '1'], >+ '<integer> <ident>': ['1 a', '1 a'], >+ 'span <integer>': ['span 1', 'span 1'], >+ 'span <custom-ident>': ['span a', 'span 1 a'], >+ 'span <integer> <custom-ident>': ['span 2 a', 'span 2 a'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-column': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a / b', 'a / b'], >+ '<integer> start': ['1', '1'], >+ '<integer>': ['1 / 3', '1 / 3'], >+ '<integer> <ident>': ['1 a / 2 b', '1 a / 2 b'], >+ 'span <integer>': ['span 1 / span 2', 'span 1 / span 2'], >+ 'span <custom-ident>': ['span a / span b', 'span 1 a / span 1 b'], >+ 'span <integer> <custom-ident>': ['span 2 a / span 3 b', 'span 2 a / span 3 b'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-row': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a / b', 'a / b'], >+ '<integer> start': ['1', '1'], >+ '<integer>': ['1 / 3', '1 / 3'], >+ '<integer> <ident>': ['1 a / 2 b', '1 a / 2 b'], >+ 'span <integer>': ['span 1 / span 2', 'span 1 / span 2'], >+ 'span <custom-ident>': ['span a / span b', 'span 1 a / span 1 b'], >+ 'span <integer> <custom-ident>': ['span 2 a / span 3 b', 'span 2 a / span 3 b'], >+ 'reset': ['auto', 'auto'], >+ }, >+ 'grid-area': { >+ initial: 'auto', >+ 'auto': ['auto', 'auto'], >+ '<custom-ident>': ['a / b / c / d', 'a / b / c / d'], >+ '<integer> start': ['1 / 2', '1 / 2'], >+ '<integer>': ['1 / 2 / 3 / 4', '1 / 2 / 3 / 4'], >+ '<integer> <ident>': ['1 a / 2 b / 3 c / 4 d', '1 a / 2 b / 3 c / 4 d'], >+ 'span <integer>': ['span 1 / span 2 / span 3 / span 4', 'span 1 / span 2 / span 3 / span 4'], >+ 'span <custom-ident>': ['span a / span b / span c / span d', 'span 1 a / span 1 b / span 1 c / span 1 d'], >+ 'span <integer> <custom-ident>': ['span 2 a / span 3 b / span 4 c / span 5 d', 'span 2 a / span 3 b / span 4 c / span 5 d'], >+ 'reset': ['auto', 'auto'], >+ }, >+ }) >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b8e344ef7776ed8c00571c758363030424ecba61 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html >@@ -0,0 +1,108 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: '::first-letter' is ignored in grid containers</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-containers"> >+<link rel="help" href="http://www.w3.org/TR/css3-selectors/#first-letter"> >+<meta name="assert" content="The test checks that grid item should ignore grid container's first-letter pseudo-element."> >+<link href="support/grid.css" rel="stylesheet"> >+<style> >+ body { line-height: 20px; } >+ .grid-first-letter::first-letter { line-height: 100px; color: red; } >+ .container-first-letter::first-letter { line-height: 200px; color: green; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.container');"> >+ >+<div id="log"></div> >+ >+<div class="container"> >+ <div class="grid grid-first-letter"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid grid-first-letter"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="grid grid-first-letter" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid grid-first-letter" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="grid grid-first-letter"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+ <div data-expected-height=200>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="inline-grid grid-first-letter"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+ <div data-expected-height=20>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="grid grid-first-letter" data-expected-height=20> >+ Anonymous item. >+ </div> >+ <div data-expected-height=200>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="inline-grid grid-first-letter" data-expected-height=20> >+ Anonymous item. >+ </div> >+ <div data-expected-height=20>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="grid"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+ <div data-expected-height=200>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="inline-grid"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+ <div data-expected-height=20>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="grid" data-expected-height=20> >+ Anonymous item. >+ </div> >+ <div data-expected-height=200>Out of grid.</div> >+</div> >+ >+<div class="container container-first-letter"> >+ <div class="inline-grid" data-expected-height=20> >+ Anonymous item. >+ </div> >+ <div data-expected-height=20>Out of grid.</div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-line-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-line-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..140d7bf115115043a844ac83852efc842340d42c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-line-001.html >@@ -0,0 +1,92 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: '::first-line' is ignored in grid containers</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-containers"> >+<link rel="help" href="http://www.w3.org/TR/css3-selectors/#first-formatted-line"> >+<meta name="assert" content="The test checks that grid item should ignore grid container's first-line pseudo-element."> >+<link href="support/grid.css" rel="stylesheet"> >+<style> >+ body { line-height: 20px; } >+ .grid-first-line::first-line { line-height: 100px; } >+ .container::first-line { line-height: 200px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid,.inline-grid');"> >+ >+<div id="log"></div> >+ >+<div class="grid grid-first-line"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+</div> >+ >+<div class="inline-grid grid-first-line"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+</div> >+ >+<div class="grid grid-first-line" data-expected-height=20> >+ Anonymous item. >+</div> >+ >+<div class="inline-grid grid-first-line" data-expected-height=20> >+ Anonymous item. >+</div> >+ >+<div class="container"> >+ <div class="grid grid-first-line"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid grid-first-line"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="grid grid-first-line" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid grid-first-line" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="grid"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid"> >+ <div class="item" data-expected-height=20>The first item.</div> >+ <div class="item" data-expected-height=20>The second item.</div> >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="grid" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+<div class="container"> >+ <div class="inline-grid" data-expected-height=20> >+ Anonymous item. >+ </div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b6914eb536ea180469ffd54fc7e88add1b6eb517 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: '::first-letter' is valid in grid items</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-containers"> >+<link rel="help" href="http://www.w3.org/TR/css3-selectors/#first-letter"> >+<meta name="assert" content="The test checks that grid items accept first-letter pseudo-element."> >+<link href="support/grid.css" rel="stylesheet"> >+<style> >+ .item::first-letter { line-height: 100px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid,.inline-grid');"> >+ >+<div id="log"></div> >+ >+<div class="grid"> >+ <div class="item" data-expected-height=100>The first item.</div> >+ <div class="item" data-expected-height=100>The second item.</div> >+</div> >+ >+<div class="inline-grid"> >+ <div class="item" data-expected-height=100>The first item.</div> >+ <div class="item" data-expected-height=100>The second item.</div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-line-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-line-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8bf8c653bf7955decf6148fea5a4065d68fbbeab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-line-001.html >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: '::first-line' is valid in grid items</title> >+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> >+<link rel="help" href="http://www.w3.org/TR/css-grid-1/#grid-containers"> >+<link rel="help" href="http://www.w3.org/TR/css3-selectors/#first-formatted-line"> >+<meta name="assert" content="The test checks that grid items accept first-line pseudo-element."> >+<link href="support/grid.css" rel="stylesheet"> >+<style> >+ .item::first-line { line-height: 100px; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+ >+<body onload="checkLayout('.grid,.inline-grid');"> >+ >+<div id="log"></div> >+ >+<div class="grid"> >+ <div class="item" data-expected-height=100>The first item.</div> >+ <div class="item" data-expected-height=100>The second item.</div> >+</div> >+ >+<div class="inline-grid"> >+ <div class="item" data-expected-height=100>The first item.</div> >+ <div class="item" data-expected-height=100>The second item.</div> >+</div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/w3c-import.log >index 36b18722d9c61981c3dd02a139dc3d3eb0df42fe..d9b45d82f4a35c7c195ca7d362ef6545ed950343 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/w3c-import.log >@@ -20,6 +20,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/display-inline-grid.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-box-sizing-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-computed-value-display-floated-items-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-container-ignores-first-line-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-display-grid-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-display-grid-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-display-inline-grid-001-expected.xht >@@ -62,6 +64,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-inline-multicol-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-inline-vertical-align-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-inline-vertical-align-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-item-accepts-first-line-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-margins-no-collapse-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-margins-no-collapse-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-model/grid-multicol-001-expected.xht >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9fb0f4ffa1c0a06d891c61e1fc3f9588db47760e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Grid Layout Test: Compute the grid's intrinsic size when there are orthogonal items</title> >+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"> >+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#algo-overview"> >+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-4/#establish-an-orthogonal-flow"> >+<meta name="assert" content="The test checks that using track's max sizing function to estimate orthogonal items' block-axis size to compute the grid's intrinsic size may lead to content overflow."> >+<style> >+.grid { >+ display: inline-grid; >+ font: 25px/1 Ahem; >+ background: green; >+ height: 150px; >+} >+ >+.item { writing-mode: vertical-lr; } >+ >+.minmax-100-200 { grid: minmax(100px, 200px) / auto; } >+.minmax-auto-200 { grid: minmax(100px, 200px) / auto; } >+.minmax-auto-100 { grid: minmax(auto, 100px) / auto; } >+.minmax-100-auto { grid: minmax(100px, auto) / auto; } >+.minmax-100-fitcontent { grid: minmax(100px, fit-content) / auto; } >+.minmax-100-1fr { grid: minmax(100px, 1fr) / auto; } >+</style> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/check-layout-th.js"></script> >+<body onload="checkLayout('.grid')"> >+ >+<pre>rows: auto</pre> >+ >+<div class="grid" data-expected-width="25" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(100px, 200px)</pre> >+ >+<div class="grid minmax-100-200" data-expected-width="50" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(auto, 200px)</pre> >+ >+<div class="grid minmax-auto-200" data-expected-width="50" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(100px, auto)</pre> >+ >+<div class="grid minmax-100-auto" data-expected-width="25" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(auto, 100px)</pre> >+ >+<div class="grid minmax-auto-100" data-expected-width="100" data-expected-height="150"> >+ <div class="item" data-expected-width="100" data-expected-height="100">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(100px, fit-content)</pre> >+ >+<div class="grid minmax-auto-fitcontent" data-expected-width="25" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >+<pre>rows: minmax(100px, 1fr)</pre> >+ >+<div class="grid minmax-auto-1fr" data-expected-width="25" data-expected-height="150"> >+ <div class="item" data-expected-width="75" data-expected-height="150">XXX XX X XXX XX X</div> >+</div> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >index 9cbe118b7bcac0a1c6cbc111eec2f1635ee818a7..005c11320bffa08728ac553488baded9799a0dce 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/w3c-import.log >@@ -16,6 +16,7 @@ None > List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-intrinsic-size-with-orthogonal-items.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-layout-free-space-unit-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-layout-free-space-unit.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-stretch-respects-min-size-001-expected.xht >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..d621e5f3b65662e6c6bd4aabf8bd1db043d00960 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/README.md >+/LayoutTests/imported/w3c/web-platform-tests/css/css-grid/grid-layout-properties.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..05a13794482a94f6c10bd9d4c98704e63ef60331 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> >+ <style type="text/css"><![CDATA[ >+ div >+ { >+ background-color: green; >+ height: 100px; >+ width: 100px; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block.html >new file mode 100644 >index 0000000000000000000000000000000000000000..21f9fb97436be415dfad77a83f2c1f085dbc0700 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<title>Paint order with float VS regular block is correct inside multicol</title> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<link rel="help" href="https://www.w3.org/TR/CSS22/zindex.html#painting-order" title="E.2 Painting order"> >+<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> >+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> >+<div style="columns:2; column-gap:0; width:100px; background:hotpink;"> >+ <div style="float:left; width:50px; height:200px; background:green;"></div> >+ <div style="height:200px; background:red;"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/going-out-of-flow-after-spanner.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/going-out-of-flow-after-spanner.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2433864333967f26a2354b791cd7b153d26e44f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/going-out-of-flow-after-spanner.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>Taking the sole box after a spanner out of flow, then remove it</title> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<link rel="help" href="http://www.w3.org/TR/css3-multicol/" title="CSS Multi-column Layout Module Level 1"> >+<meta name="assert" content="An absolutely positioned box is still contained by the multicol container if its containing block is inside the multicol container"> >+<div id="multicol" style="columns:3;"> >+ <div style="position:relative;"> >+ <div style="column-span:all;"></div> >+ <div id="victim" style="width:100%; height:300px;"></div> >+ </div> >+</div> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(() => { >+ var multicol = document.getElementById("multicol"); >+ var victim = document.getElementById("victim"); >+ assert_equals(multicol.getBoundingClientRect().height, 100); >+ victim.style.position = "absolute"; >+ assert_equals(multicol.getBoundingClientRect().height, 100); >+ victim.style.display = "none"; >+ assert_equals(multicol.getBoundingClientRect().height, 0); >+}, "Going out of flow and still fragmented"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3d496cd391a09975106410abd5f4d297d93d1337 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000-expected.html >@@ -0,0 +1,66 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.blueborders { >+ position: absolute; >+ top: 0; >+ left: 194px; /* 188px first column + (16px gap - 4px rule) / 2 */ >+ width: 200px; /* 188px second column + (16px gap - 4px rule) */ >+ height: 100px; >+ border-right: blue solid 4px; >+ border-left: blue solid 4px; >+} >+ >+.innerbg { >+ height: 100px; >+ width: 188px; >+ background: rgba(255, 0, 255, 0.3); >+ position: absolute; >+ top: 0; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="blueborders"></div> >+ <div class="innerbg" style="left: 0"></div> >+ <div class="inner lefthalf" style="left: 0; height: 60px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="innerbg" style="left: 204px"></div> >+ <div class="innerbg" style="left: 408px"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..391985d6a897c50955d2259cea4eedf1718f02a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-000-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-rule: 4px solid blue; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ background: rgba(255, 0, 255, 0.3); >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..46357f940d29e578e07fd505c4143084ce58afee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001-expected.html >@@ -0,0 +1,82 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.blueborders { >+ position: absolute; >+ top: 0; >+ left: 194px; /* 188px first column + (16px gap - 4px rule) / 2 */ >+ width: 200px; /* 188px second column + (16px gap - 4px rule) */ >+ height: 100px; >+ border-right: blue solid 4px; >+ border-left: blue solid 4px; >+} >+ >+.innerbg { >+ height: 100px; >+ width: 188px; >+ background: rgba(255, 0, 255, 0.3); >+ position: absolute; >+ top: 0; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="blueborders"></div> >+ <div class="innerbg" style="left: 0"></div> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="innerbg" style="left: 204px"></div> >+ <div class="inner lefthalf" style="left: 204px; height: 80px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ<br> >+ </div> >+ <div class="innerbg" style="left: 408px"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..69c9049266d12abcedfdb8fd8bdadeacbf8c505d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-001-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-rule: 4px solid blue; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ background: rgba(255, 0, 255, 0.3); >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9b6c5f860bd4c2115d01b3ec430c1c457506565a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002-expected.html >@@ -0,0 +1,99 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.blueborders { >+ position: absolute; >+ top: 0; >+ left: 194px; /* 188px first column + (16px gap - 4px rule) / 2 */ >+ width: 200px; /* 188px second column + (16px gap - 4px rule) */ >+ height: 100px; >+ border-right: blue solid 4px; >+ border-left: blue solid 4px; >+} >+ >+.innerbg { >+ height: 100px; >+ width: 188px; >+ background: rgba(255, 0, 255, 0.3); >+ position: absolute; >+ top: 0; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="blueborders"></div> >+ <div class="innerbg" style="left: 0"></div> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="innerbg" style="left: 204px"></div> >+ <div class="inner lefthalf" style="left: 204px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ PPPPP<br> >+ QQQQQ<br> >+ RRRRR<br> >+ SSSSS<br> >+ TTTTT >+ </div> >+ <div class="innerbg" style="left: 408px"></div> >+ <div class="inner lefthalf" style="left: 408px"> >+ UUUUU<br> >+ VVVVV<br> >+ WWWWW<br> >+ XXXXX<br> >+ YYYYY >+ </div> >+ <div class="inner righthalf" style="left: 503px"> >+ ZZZZZ<br> >+ aaaaa<br> >+ bbbbb<br> >+ ccccc<br> >+ ddddd >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..279ed941cbee6f1b65d6dc2d62395a995f7fc58c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002.html >@@ -0,0 +1,64 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-002-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-rule: 4px solid blue; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ background: rgba(255, 0, 255, 0.3); >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ<br> >+ RRRRR<br> >+ SSSSS<br> >+ TTTTT<br> >+ UUUUU<br> >+ VVVVV<br> >+ WWWWW<br> >+ XXXXX<br> >+ YYYYY<br> >+ ZZZZZ<br> >+ aaaaa<br> >+ bbbbb<br> >+ ccccc<br> >+ ddddd >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eb0d55d64d97092ae61668b1ebcb08e9492a5481 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003-expected.html >@@ -0,0 +1,82 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.blueborders { >+ position: absolute; >+ top: 0; >+ left: 194px; /* 188px first column + (16px gap - 4px rule) / 2 */ >+ width: 200px; /* 188px second column + (16px gap - 4px rule) */ >+ height: 100px; >+ border-right: blue solid 4px; >+ border-left: blue solid 4px; >+} >+ >+.innerbg { >+ height: 100px; >+ width: 188px; >+ background: rgba(255, 0, 255, 0.3); >+ position: absolute; >+ top: 0; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="blueborders"></div> >+ <div class="innerbg" style="left: 0"></div> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="innerbg" style="left: 204px"></div> >+ <div class="inner lefthalf" style="left: 204px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ PPPPP<br> >+ QQQQQ >+ </div> >+ <div class="innerbg" style="left: 408px"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..102202dd1da474ee9daaac4e350ca4dc89669878 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-003-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-rule: 4px solid blue; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ background: rgba(255, 0, 255, 0.3); >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px; column-fill: auto"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e7ebcff4a082e2455d303163ee7b86131331427f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000-expected.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner lefthalf" style="left: 0; height: 60px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ DDDDD<br> >+ EEEEE >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a66a58fc746bff81deda9918d00dba816e1b9a72 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-nobackground-000-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..006ec1d2221d80cb39e58228aacc5a779349d4bf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001-expected.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="inner lefthalf" style="left: 204px; height: 80px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ<br> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d47fcd31a0a78194e872f1b26f561b4377cc8766 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html >@@ -0,0 +1,49 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-nobackground-001-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5ec4c616973aa9acfa3c85eda2e894d7a53873c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002-expected.html >@@ -0,0 +1,77 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="inner lefthalf" style="left: 204px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ PPPPP<br> >+ QQQQQ<br> >+ RRRRR<br> >+ SSSSS<br> >+ TTTTT >+ </div> >+ <div class="inner lefthalf" style="left: 408px"> >+ UUUUU<br> >+ VVVVV<br> >+ WWWWW<br> >+ XXXXX<br> >+ YYYYY >+ </div> >+ <div class="inner righthalf" style="left: 503px"> >+ ZZZZZ<br> >+ aaaaa<br> >+ bbbbb<br> >+ ccccc<br> >+ ddddd >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e20568fd17e7d2dc7526f32a48ed3bb6ac417563 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html >@@ -0,0 +1,62 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-nobackground-002-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ<br> >+ RRRRR<br> >+ SSSSS<br> >+ TTTTT<br> >+ UUUUU<br> >+ VVVVV<br> >+ WWWWW<br> >+ XXXXX<br> >+ YYYYY<br> >+ ZZZZZ<br> >+ aaaaa<br> >+ bbbbb<br> >+ ccccc<br> >+ ddddd >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..471df948ca88e279b2dd32a03b43ba616484517a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003-expected.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE HTML> >+<title>CSS Test Reference: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<style> >+ >+.outer { >+ height: 100px; >+ width: 800px; >+ background: rgba(0, 0, 255, 0.3); >+ position: relative; >+} >+ >+.inner { >+ height: 100px; >+ width: 86px; >+ font: 16px/1.25 sans-serif; >+ position: absolute; >+ top: 0; >+} >+ >+.lefthalf { >+ border-right: 2px solid fuchsia; >+ padding-right: 7px; >+} >+ >+.righthalf { >+ padding-left: 7px; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner lefthalf" style="left: 0"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE >+ </div> >+ <div class="inner righthalf" style="left: 95px"> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ >+ </div> >+ <div class="inner lefthalf" style="left: 204px"> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO >+ </div> >+ <div class="inner righthalf" style="left: 299px"> >+ PPPPP<br> >+ QQQQQ >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..edf18f98981753750ec6588e5fd0ff97c1475005 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html >@@ -0,0 +1,49 @@ >+<!DOCTYPE HTML> >+<title>CSS Test: breaking of a multicolumn</title> >+<meta charset="utf-8"> >+<link rel="author" title="L. David Baron" href="https://dbaron.org/"> >+<link rel="author" title="Mozilla" href="https://mozilla.org/"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#column-gaps-and-rules"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cf"> >+<link rel="match" href="multicol-breaking-nobackground-003-ref.html"> >+<style> >+ >+.outer { >+ height: 100px; >+ column-fill: auto; >+ width: 800px; >+ column-count: 4; >+ column-gap: 16px; >+ background: rgba(0, 0, 255, 0.3); >+} >+ >+.inner { >+ column-count: 2; >+ column-rule: 2px solid fuchsia; >+ column-gap: 16px; >+ font: 16px/1.25 sans-serif; >+} >+ >+</style> >+ >+<div class="outer"> >+ <div class="inner" style="height: 300px; column-fill: auto"> >+ AAAAA<br> >+ BBBBB<br> >+ CCCCC<br> >+ DDDDD<br> >+ EEEEE<br> >+ FFFFF<br> >+ GGGGG<br> >+ HHHHH<br> >+ IIIII<br> >+ JJJJJ<br> >+ KKKKK<br> >+ LLLLL<br> >+ MMMMM<br> >+ NNNNN<br> >+ OOOOO<br> >+ PPPPP<br> >+ QQQQQ >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-001.xht >index 587dc9f83820a71e87a2216da9149c2456a50f38..f177328c6a571c3a751f317da8f2094a70f7ffae 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-001.xht >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-001.xht >@@ -6,8 +6,8 @@ > <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-05 --> > <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" /> > <link rel="match" href="multicol-gap-001-ref.xht" /> >- <meta name="flags" content="ahem may" /> >- <meta name="assert" content="This test checks that the 'normal' column gap is 1em, which is suggested -- and not prescribed -- by the specification." /> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This test checks that the 'normal' column gap is 1em." /> > <style type="text/css"><![CDATA[ > div > { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-003.xht >index 09a04734f5040b18e8142f6e1b7f96d7422ca0e0..c1183a75fca92234bd621f9e2e4fa330daeecb24 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-003.xht >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-gap-003.xht >@@ -6,7 +6,7 @@ > <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-05 --> > <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" /> > <link rel="match" href="multicol-gap-002-ref.xht" /> >- <meta name="flags" content="ahem may" /> >+ <meta name="flags" content="ahem" /> > <style type="text/css"><![CDATA[ > div > { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..05a13794482a94f6c10bd9d4c98704e63ef60331 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit-expected.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> >+ <style type="text/css"><![CDATA[ >+ div >+ { >+ background-color: green; >+ height: 100px; >+ width: 100px; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <p>Test passes if there is a filled green square and <strong>no red</strong>.</p> >+ <div></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b087f56ac6e06d7e11d719976ae66459c97722d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>Orthogonal writing mode root inside shrink-to-fit multicol container</title> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> >+<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#intrinsic-sizes" title="4.1. Intrinsic Sizes"> >+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> >+<div style="width:100px; height:100px; background:red;"> >+ <div style="float:left; columns:1; column-gap:0; height:100px; background:green;"> >+ <div style="writing-mode:vertical-rl;"> >+ <div style="width:100px; height:100px;"></div> >+ </div> >+ </div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/w3c-import.log >index b80d85bd2bd4fe591ff55d60a9e91a28d94ecd74..afd5c5ab6a01233631a029649829bf2af37ca824 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/w3c-import.log >@@ -16,6 +16,9 @@ None > List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/extremely-tall-multicol-with-extremely-tall-child-crash.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/float-and-block.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/going-out-of-flow-after-spanner.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-basic-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-basic-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-basic-002-expected.html >@@ -42,6 +45,22 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-break-000.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-break-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-break-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-breaking-nobackground-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-clip-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-clip-001.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-clip-002-expected.xht >@@ -290,3 +309,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-width-small-001.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-zero-height-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/multicol-zero-height-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/orthogonal-writing-mode-shrink-to-fit.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-computed-style.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-computed-style.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-computed-style.html >new file mode 100644 >index 0000000000000000000000000000000000000000..46d876f1a150c257be9c37d25a4a4c34d2f1d73d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-computed-style.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<title>column-width:0</title> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cw" title="3.1. column-width"> >+<div id="longhand" style="column-width:0;"></div> >+<div id="shorthand" style="columns:0;"></div> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(() => { >+ assert_equals(getComputedStyle(longhand).columnWidth, "0px"); >+ assert_equals(getComputedStyle(shorthand).columnWidth, "0px"); >+}, "column-width:0 is a valid CSS declaration"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82fcaa3b2aa4a271db14feb00256d0aedbce2d85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout-expected.html >@@ -0,0 +1,4 @@ >+<!DOCTYPE html> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<p>Test passes if there is a filled green square.</p> >+<div style="width:100px; height:100px; background:green;"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout.html >new file mode 100644 >index 0000000000000000000000000000000000000000..aaae421912a18276d4750cfaecbc5245d345ecd8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-multicol/zero-column-width-layout.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>column-width:0</title> >+<meta name="assert" content="column-width:0 is valid as specified and computed value, but its used value may never be less than 1px"> >+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-multicol/#cw" title="3.1. column-width"> >+<link rel="match" href="../reference/ref-filled-green-100px-square-only.html"> >+<p>Test passes if there is a filled green square.</p> >+<div style="float:left; width:50px; height:100px; column-width:0; column-gap:0;"> >+ <div style="height:5000px; background:green;"></div> >+</div> >+<div style="float:left; width:50px; height:100px; columns:0; column-gap:0;"> >+ <div style="height:5000px; background:green;"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ec8d84508a886633de46a571c5c1b871ac24c6db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist-expected.txt >@@ -0,0 +1,37 @@ >+ >+PASS pre test setup >+PASS Whitelisted property backgroundAttachment should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundBlendMode should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundClip should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundColor should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundImage should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundOrigin should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundPosition should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundRepeat should be applied to first-letter pseudo elements. >+PASS Whitelisted property backgroundSize should be applied to first-letter pseudo elements. >+PASS Whitelisted property border should be applied to first-letter pseudo elements. >+PASS Whitelisted property borderImage should be applied to first-letter pseudo elements. >+PASS Whitelisted property borderRadius should be applied to first-letter pseudo elements. >+PASS Whitelisted property boxShadow should be applied to first-letter pseudo elements. >+PASS Whitelisted property color should be applied to first-letter pseudo elements. >+PASS Whitelisted property float should be applied to first-letter pseudo elements. >+FAIL Whitelisted property font should be applied to first-letter pseudo elements. assert_equals: expected "italic small-caps 900 normal 10px / 20px sans-serif" but got "italic small-caps 900 normal 10px/20px sans-serif" >+PASS Whitelisted property fontFeatureSettings should be applied to first-letter pseudo elements. >+FAIL Whitelisted property fontSizeAdjust should be applied to first-letter pseudo elements. assert_equals: expected (string) "0.5" but got (undefined) undefined >+PASS Whitelisted property fontKerning should be applied to first-letter pseudo elements. >+FAIL Whitelisted property fontVariationSettings should be applied to first-letter pseudo elements. assert_equals: expected "\"XHGT\" 0.7" but got "'XHGT' 0.7" >+PASS Whitelisted property letterSpacing should be applied to first-letter pseudo elements. >+PASS Whitelisted property margin should be applied to first-letter pseudo elements. >+PASS Whitelisted property padding should be applied to first-letter pseudo elements. >+PASS Whitelisted property opacity should be applied to first-letter pseudo elements. >+FAIL Whitelisted property textDecoration should be applied to first-letter pseudo elements. assert_equals: expected "overline wavy rgb(10, 20, 30)" but got "none" >+FAIL Whitelisted property textJustify should be applied to first-letter pseudo elements. assert_equals: expected (string) "inter-word" but got (undefined) undefined >+PASS Whitelisted property textShadow should be applied to first-letter pseudo elements. >+PASS Whitelisted property textTransform should be applied to first-letter pseudo elements. >+FAIL Whitelisted property textUnderlinePosition should be applied to first-letter pseudo elements. assert_equals: expected (string) "under" but got (undefined) undefined >+PASS Whitelisted property verticalAlign should be applied to first-letter pseudo elements. >+PASS Whitelisted property wordSpacing should be applied to first-letter pseudo elements. >+FAIL Non-whitelisted property transition should not be applied to first-letter pseudo elements. assert_equals: expected "all 0s ease 0s" but got "transform 1s ease 0s" >+PASS Non-whitelisted property transform should not be applied to first-letter pseudo elements. >+FAIL Non-whitelisted property wordBreak should not be applied to first-letter pseudo elements. assert_equals: expected "normal" but got "break-all" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html >new file mode 100644 >index 0000000000000000000000000000000000000000..073e554a8c4c58d2c73d2adedfb0ec770de7c524 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html >@@ -0,0 +1,82 @@ >+<!DOCTYPE html> >+<title>CSS Test: Properties allowed on ::first-letter pseudo elements</title> >+<link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+#target::first-letter {} >+#target { visibility: hidden; } >+</style> >+<div id="target">text</div> >+<script> >+'use strict'; >+var style; >+const target = document.querySelector("#target"); >+var defaultComputedStyle = getComputedStyle(target); >+ >+test(function() { >+ var styleRule = document.styleSheets[0].cssRules[0]; >+ assert_equals(styleRule.selectorText, '#target::first-letter', 'make sure we have the correct style rule'); >+ style = styleRule.style; >+}, 'pre test setup'); >+ >+var validProperties = { >+ backgroundAttachment: 'fixed', >+ backgroundBlendMode: 'hue', >+ backgroundClip: 'padding-box', >+ backgroundColor: 'rgb(10, 20, 30)', >+ backgroundImage: 'linear-gradient(black, white)', >+ backgroundOrigin: 'border-box', >+ backgroundPosition: 'left 10px top 20px', >+ backgroundRepeat: 'no-repeat', >+ backgroundSize: '10px 20px', >+ border: '40px dotted rgb(10, 20, 30)', >+ borderImage: 'linear-gradient(black, white) 10% / 20 / 30px repeat', >+ borderRadius: '10px 20px', >+ boxShadow: 'rgb(10, 20, 30) 10px 20px 30px 40px inset', >+ color: 'rgba(10, 20, 30, 0.4)', >+ float: 'right', >+ font: 'italic small-caps 900 normal 10px / 20px sans-serif', >+ fontFeatureSettings: '"vert" 2', >+ fontSizeAdjust: '0.5', >+ fontKerning: 'none', >+ fontVariationSettings: '"XHGT" 0.7', >+ letterSpacing: '12px', >+ margin: '10px 20px 30px 40px', >+ padding: '10px 20px 30px 40px', >+ opacity: '0.5', >+ textDecoration: 'overline wavy rgb(10, 20, 30)', >+ textJustify: 'inter-word', >+ textShadow: 'rgb(10, 20, 30) 10px 20px 30px', >+ textTransform: 'capitalize', >+ textUnderlinePosition: 'under', >+ verticalAlign: '12%', >+ wordSpacing: '12px' >+}; >+ >+var invalidProperties = { >+ transition: 'transform 1s', >+ transform: 'rotate(45deg)', >+ wordBreak: 'break-all' >+}; >+ >+function testFirstLetterProperty(property, rule, expected, reason) { >+ test(function() { >+ style[property] = ""; >+ style[property] = rule; >+ assert_equals(getComputedStyle(target, '::first-letter')[property], expected); >+ style[property] = ""; >+ }, reason); >+} >+ >+for (var property in validProperties) { >+ testFirstLetterProperty(property, validProperties[property], validProperties[property], >+ "Whitelisted property " + property + " should be applied to first-letter pseudo elements."); >+} >+ >+for (var property in invalidProperties) { >+ testFirstLetterProperty(property, invalidProperties[property], defaultComputedStyle[property], >+ "Non-whitelisted property " + property + " should not be applied to first-letter pseudo elements."); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dbadd365c25a9e3214e9920948d2a5c934075e2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<style> >+input::placeholder { >+ color: red; >+} >+</style> >+<form> >+ <input placeholder="this text should be red"> >+</form> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2db3480feb5928c6a39fbf6084cf07bec0ba4767 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Interaction of ::first-line and ::placeholder</title> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#placeholder-pseudo"> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-pseudo"> >+<link rel="match" href="first-line-and-placeholder-ref.html"> >+<meta name="assert" content="Tests ::placeholder interaction with ::first-line pseudo element"> >+<style> >+input::first-line { >+ background-color: initial; >+} >+ >+input::placeholder { >+ color: red; >+} >+</style> >+<form> >+ <input placeholder="this text should be red"> >+</form> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..92ae71d83fcbea52e4120ed28af5438dd54d4509 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-expected.html >@@ -0,0 +1,9 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<style> >+#number::placeholder { >+ color: blue; >+} >+</style> >+<input id="number" type="number" placeholder="Placeholder"> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-notref.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-notref.html >new file mode 100644 >index 0000000000000000000000000000000000000000..92ae71d83fcbea52e4120ed28af5438dd54d4509 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-notref.html >@@ -0,0 +1,9 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<style> >+#number::placeholder { >+ color: blue; >+} >+</style> >+<input id="number" type="number" placeholder="Placeholder"> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a557f1091ec29dd90cd4290cf96ac4752b04ff3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number.html >@@ -0,0 +1,11 @@ >+<!doctype html> >+<title>CSS Test: ::placeholder applies to input type="number"</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="mismatch" href="placeholder-input-number-notref.html"> >+<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#placeholder-pseudo"> >+<style> >+#number::placeholder { >+ color: green; >+} >+</style> >+<input id="number" type="number" placeholder="Placeholder"> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/w3c-import.log >index 478a2f5201cbebfd09b3b0594ad1b5595a5698cf..bcfdfd37e948a09537f00cc742804d32a3812659 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/w3c-import.log >@@ -23,6 +23,9 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-004-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-letter-property-whitelist.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/first-line-and-placeholder.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-and-other-pseudo-elements-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-and-other-pseudo-elements.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-color-expected.html >@@ -31,3 +34,6 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-font-properties.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-inherit-values-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/marker-inherit-values.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number-notref.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo/placeholder-input-number.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f194e469f05845e9ee4e362541971aeeaceff1ce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<title>CSS Scoping: Dynamically overriding nested slot display value</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slots-in-shadow-tree"> >+<link rel="match" href="reference/green-box.html"/> >+<style> >+ #outerHost { >+ width: 100px; >+ height: 100px; >+ background: red; >+ } >+</style> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="outerHost"> </div> >+<script> >+ let outerRoot = outerHost.attachShadow({mode:"open"}); >+ outerRoot.innerHTML = '<div id="innerHost"><slot></slot></div>'; >+ let innerHost = outerRoot.querySelector("#innerHost"); >+ let innerRoot = innerHost.attachShadow({mode:"open"}); >+ innerRoot.innerHTML = '<slot style="display:none; border:solid 50px green"></slot>'; >+ document.body.offsetTop; >+ innerRoot.querySelector("slot").style.display = "block"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..423beaf055b9f482dd299c055721a405df1d5d77 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001.html >@@ -0,0 +1,16 @@ >+<!doctype html> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<link rel="match" href="reference/green-box.html"> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"><div></div></div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ :host ::slotted(div) { width: 100px; height: 100px; background: green; } >+ * :host ::slotted(div) { background: red; } >+ </style> >+ <slot></slot> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6660d4a40c6244e675bb0b0dfddac86d36034fe9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<link rel="match" href="reference/green-box.html"> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"></div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ :host { width: 100px; height: 100px; background: green; } >+ * :host { background: red; } >+ </style> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-invalidation.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-invalidation.html >new file mode 100644 >index 0000000000000000000000000000000000000000..61ed4bbfc704d94efb29527db8239ee1563c9802 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-invalidation.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<title>CSS Test: element style is correctly updated for rule with :host</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<div id="host"><div id="slotted"></div></div> >+<script> >+test(function() { >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ :host ::slotted(div) { width: 100px; height: 100px; background: red; } >+ :host ::slotted(.foo) { background: green; } >+ </style> >+ <slot></slot> >+ `; >+ assert_equals(getComputedStyle(slotted).backgroundColor, "rgb(255, 0, 0)"); >+ host.firstElementChild.classList.add('foo'); >+ assert_equals(getComputedStyle(slotted).backgroundColor, "rgb(0, 128, 0)"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-dom-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-dom-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fff0112b1e7d616e7f86e2356a6983e0444c4235 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-dom-001.html >@@ -0,0 +1,16 @@ >+<!doctype html> >+<title>CSS Test: :host in DOM APIs</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<div id="host"></div> >+<script> >+test(function() { >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = `<div></div>`; >+ assert_false(host.matches(":host"), ":host shouldn't match from CSSOM from outside the shadow tree"); >+ assert_true(root.firstElementChild.matches(":host div"), ":host should match from within the shadow tree"); >+ assert_equals(root.querySelector(":host div"), root.firstElementChild, ":host should match from within the shadow tree"); >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-functional-descendant-invalidation.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-functional-descendant-invalidation.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b9f1329a95d2f145a6990dc87a568f75cfd73caa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-functional-descendant-invalidation.html >@@ -0,0 +1,22 @@ >+<!doctype html> >+<title>CSS Test: element style is correctly updated for rule with :host(..)</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<div id="host"><div id="slotted"></div></div> >+<script> >+test(function() { >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ :host ::slotted(div) { width: 100px; height: 100px; background: red; } >+ :host(.foo) ::slotted(div) { background: green; } >+ </style> >+ <slot></slot> >+ `; >+ assert_equals(getComputedStyle(slotted).backgroundColor, "rgb(255, 0, 0)"); >+ host.classList.add('foo'); >+ assert_equals(getComputedStyle(slotted).backgroundColor, "rgb(0, 128, 0)"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c8833c4b5b7abb52a6c336ea6b6f24e546cfed62 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<title>CSS Test: :host multiple times in the same compound selector.</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<link rel="match" href="reference/green-box.html"> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"></div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ :host:host { width: 100px; height: 100px; background: green } >+ </style> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f8e412cc00565c5b20416bee5b88e0cc95ddc6d8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<title>CSS Test: :host doesn't match nested shadow hosts.</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<link rel="match" href="reference/green-box.html"> >+<style> >+ #host { >+ width: 100px; >+ height: 100px; >+ } >+</style> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host">FAIL</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ div { >+ background: green; >+ width: 100px; >+ height: 100px; >+ } >+ :host { background: red !important } >+ div:host { background: red !important } >+ </style> >+ <div id="nested-host">FAIL - nested shadow host</div> >+ `; >+ root.getElementById("nested-host").attachShadow({ mode: "open" }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f05b7c729f31a7225809f6166ea0d65be8fa0314 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001.html >@@ -0,0 +1,17 @@ >+<!doctype html> >+<title>CSS Test: :host matches while collecting ::slotted rules</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#host-selector"> >+<link rel="match" href="reference/green-box.html"> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"><div></div></div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style> >+ ::slotted(div) { width: 100px; height: 100px; background: red; } >+ :host ::slotted(div) { background: green; } >+ </style> >+ <slot></slot> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7ce384c851446bb2eceb9712f27ece6e7adf73b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-001.html >@@ -0,0 +1,42 @@ >+<!doctype html> >+<title>CSS Test: @keyframes applies in the shadow tree.</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<!-- >+ Beware of https://github.com/w3c/csswg-drafts/issues/1995 potentially, but >+ unlikely, changing the expected result of this test. >+ --> >+<style> >+#in-document { >+ width: 100px; >+ height: 100px; >+ background: blue; >+ animation: myanim 10s infinite; >+} >+</style> >+<div id="host"><div id="in-document"></div></div> >+<script> >+test(function() { >+ host.attachShadow({ mode: "open" }).innerHTML = ` >+ <style> >+ @keyframes myanim { >+ from { background: red; } >+ to { background: green; } >+ } >+ #in-shadow { >+ width: 100px; >+ height: 100px; >+ background: blue; >+ animation: myanim 10s infinite; >+ } >+ </style> >+ <slot></slot> >+ <div id="in-shadow"></div> >+ `; >+ >+ assert_equals(document.getElementById('in-document').getAnimations().length, 0); >+ assert_equals(host.shadowRoot.getElementById('in-shadow').getAnimations().length, 1); >+}, "@keyframes applies in the shadow tree") >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3b24fd6eb7fb78d0cba549622b2779f298815e38 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-002.html >@@ -0,0 +1,34 @@ >+<!doctype html> >+<title>CSS Test: @keyframes from the document don't apply in the shadow tree.</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<!-- >+ Beware of https://github.com/w3c/csswg-drafts/issues/1995 potentially, but >+ unlikely, changing the expected result of this test. >+ --> >+<style> >+@keyframes myanim { >+ from { background: red; } >+ to { background: red; } >+} >+</style> >+<div id="host"></div> >+<script> >+test(function() { >+ host.attachShadow({ mode: "open" }).innerHTML = ` >+ <style> >+ #in-shadow { >+ width: 100px; >+ height: 100px; >+ background: blue; >+ animation: myanim 10s infinite; >+ } >+ </style> >+ <div id="in-shadow"></div> >+ `; >+ >+ assert_equals(host.shadowRoot.getElementById('in-shadow').getAnimations().length, 0); >+}, "@keyframes from the document don't apply in the shadow tree"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/host-green-box.css b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/host-green-box.css >new file mode 100644 >index 0000000000000000000000000000000000000000..a77b3fdc6432ea324e1601b99e901611d76098b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/host-green-box.css >@@ -0,0 +1,5 @@ >+:host { >+ background: green; >+ width: 100px; >+ height: 100px; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..2d6dc68f2d3fd857e0f3fd7e9c65e3dd7fff80fe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/resources/host-green-box.css >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b9a0d1a2991c071bb3654995f93c4ac7ff495aee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Scoping Module Level 1 - Dynamic mutations to both shadow root and shadow host subtrees</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="help" href="https://bugzil.la/1303605"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<style> >+ #host { >+ width: 100px; >+ height: 100px; >+ background: red; >+ } >+ >+ #host > div { >+ width: 100px; >+ height: 50px; >+ background: green; >+ } >+</style> >+<div id="host"></div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ document.body.offsetTop; >+ >+ root.innerHTML = `<slot name="slot1"></slot><slot name="slot2"></slot>`; >+ host.innerHTML = `<div slot="slot1"></div><div slot="slot2"></div>`; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1adf516311f3a7ae470308e8698f3165b5fa6ca5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<title>CSS Test: @import in Shadow DOM</title> >+<link rel="help" href="https://drafts.csswg.org/css-cascade/#at-import"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host">FAIL</div> >+<script> >+ host.attachShadow({ mode: "open" }).innerHTML = ` >+ <style> >+ @import url("resources/host-green-box.css"); >+ </style> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..275ac47a613adb26c408912160a339b8a71c9c9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Disabled stylesheet dynamically</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"></div> >+<script> >+ let root = host.attachShadow({ mode: 'open' }); >+ root.innerHTML = ` >+ <style> >+ div { background: green; width: 100px; height: 100px; } >+ </style> >+ <style> >+ div { background: red; } >+ </style> >+ <div></div> >+ `; >+ document.body.offsetTop; >+ root.styleSheets[1].disabled = true; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9a5672eb63a902d08f309f96ba659b615cceeda9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic fallback content</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"> >+ <span slot="myslot">FAIL</span> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <slot name="myslot"> >+ <div style="width: 100px; height: 100px; background: green"></div> >+ </slot> >+ `; >+ document.body.offsetTop; >+ host.firstElementChild.remove(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f65d0c7a2129d685429cef4b754a720816af6b22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic fallback content</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"> >+ <span slot="myslot">FAIL</span> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <slot name="myslot"> >+ <div style="width: 100px; height: 100px; background: green"></div> >+ </slot> >+ `; >+ document.body.offsetTop; >+ host.firstElementChild.removeAttribute("slot"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a30e8fed7d257ceedc249c24b249fab69d85c19d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003.html >@@ -0,0 +1,18 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic fallback content</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <slot name="myslot">FAIL</slot> >+ `; >+ document.body.offsetTop; >+ host.innerHTML = ` >+ <div slot="myslot" style="width: 100px; height: 100px; background: green"></div> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..29e407573a31ba87da8419121431b661612c68ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic fallback content</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"> >+ <div slot="myslot" style="width: 100px; height: 100px; background: green"></div> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <slot name="myslot"></slot> >+ `; >+ document.body.offsetTop; >+ let newSlot = document.createElement('slot'); >+ newSlot.appendChild(document.createTextNode("FAIL")); >+ newSlot.setAttribute("name", "myslot"); >+ root.insertBefore(newSlot, root.firstChild); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1d84907e5fc0deb164bd38ab6b9979977a003fc6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic fallback content</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"> >+ <div slot="myslot" style="width: 100px; height: 100px; background: green"></div> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <slot name="myslot"></slot> >+ <slot name="myotherslot"> >+ FAIL >+ </slot> >+ `; >+ document.body.offsetTop; >+ host.firstElementChild.setAttribute("slot", "myotherslot"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e8fe49ac96ff1694565bd82213c07f7204f0bb1c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Scoping: Dynamic reassignment of a slot.</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1435632"> >+<link rel="match" href="reference/green-box.html"/> >+<div id="host"> >+ <div id="green" style="background: green"></div> >+ <div id="red" style="background: red" slot="myslot"></div> >+</div> >+<script> >+ let root = host.attachShadow({ mode: "open" }); >+ root.innerHTML = ` >+ <style>::slotted(div) { width: 100px; height: 100px }</style> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <slot name="myslot">FAIL</slot> >+ `; >+ document.body.offsetTop; >+ green.setAttribute("slot", "myslot"); >+ red.removeAttribute("slot"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a3b89be389a780dd53a1b53224810ecb4866c287 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document.html >@@ -0,0 +1,18 @@ >+<!doctype html> >+<title>CSS Scoping Module Level 1 - Dynamic insertion of shadow host</title> >+<link rel="author" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors-data-model"> >+<link rel="match" href="reference/green-box.html"/> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<script> >+ let host = document.createElement('div'); >+ let root = host.attachShadow({ mode: 'open' }); >+ root.innerHTML = ` >+ <style> >+ div { background: green; width: 100px; height: 100px; } >+ </style> >+ <div></div> >+ `; >+ document.body.offsetTop; >+ document.body.appendChild(host); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-invalidation.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-invalidation.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f8471062e1d0b222e5b3a165f35e6252f990a1c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-invalidation.html >@@ -0,0 +1,35 @@ >+<!doctype html> >+<title>CSS Test: Style invalidation for ::slotted()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> >+<div id="host"> >+ <div> >+ <span></span> >+ <span></span> >+ </div> >+ <div id="slotted"> >+ <span></span> >+ <span></span> >+ </div> >+ <div> >+ <span></span> >+ <span></span> >+ </div> >+</div> >+<script> >+test(function() { >+ var root = host.attachShadow({"mode":"open"}); >+ root.innerHTML = '<style>.outer ::slotted(#slotted) { background-color: red } .outer .inner::slotted(#slotted) { background-color: green }</style><div id="outer"><slot id="inner"></slot></div>'; >+ >+ assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgba(0, 0, 0, 0)"); >+ >+ root.querySelector("#outer").className = "outer"; >+ assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgb(255, 0, 0)"); >+ >+ root.querySelector("#inner").className = "inner"; >+ assert_equals(window.getComputedStyle(slotted).backgroundColor, "rgb(0, 128, 0)"); >+}) >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-link.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-link.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c06c96143ba0d478940fb54208d241adb4f6ee8b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-link.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Scoping: ::slotted :link</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="host"><a id="a" href="#notvisited">This link should be green.</a></div> >+<script> >+ let root = host.attachShadow({mode:"open"}); >+ root.innerHTML = ` >+ <style> >+ ::slotted(:link) { color:green } >+ ::slotted(:visited) { color:red } >+ </style> >+ <slot></slot>`; >+ >+ test(() => { >+ assert_equals(getComputedStyle(a).color, "rgb(0, 128, 0)", "Unvisited link should be green."); >+ }, "Check that we match :link and not :visited for slotted anchor."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-parsing.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-parsing.html >new file mode 100644 >index 0000000000000000000000000000000000000000..308ff430449e4569abea713814f336eaa9e0e98a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-parsing.html >@@ -0,0 +1,57 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Scoping: ::slotted pseudo parsing</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style id="styleElm"> >+</style> >+<script> >+ function parse_selector(selector_text) { >+ try { >+ styleElm.sheet.insertRule(selector_text+"{}"); >+ styleElm.sheet.deleteRule(0); >+ return true; >+ } catch (ex) { >+ return false; >+ } >+ } >+ >+ function test_valid_selector(selector_text) { >+ test(function(){ >+ assert_true(parse_selector(selector_text)); >+ }, "Should be a valid selector: '" + selector_text + "'"); >+ } >+ >+ function test_invalid_selector(selector_text) { >+ test(function(){ >+ assert_false(parse_selector(selector_text)); >+ }, "Should be an invalid selector: '" + selector_text + "'"); >+ } >+ >+ test_invalid_selector("::slotted"); >+ test_invalid_selector("::slotted()"); >+ test_invalid_selector("::slotted(*).class"); >+ test_invalid_selector("::slotted(*)#id {}"); >+ test_invalid_selector("::slotted(*)[attr]"); >+ test_invalid_selector("::slotted(*):hover"); >+ test_invalid_selector("::slotted(*):read-only"); >+ test_invalid_selector("::slotted(*)::slotted(*)"); >+ test_invalid_selector("::slotted(*)::before::slotted(*)"); >+ test_invalid_selector("::slotted(*) span"); >+ >+ test_valid_selector("::slotted(*)"); >+ test_valid_selector("::slotted(div)"); >+ test_valid_selector("::slotted([attr]:hover)"); >+ test_valid_selector("::slotted(:not(.a))"); >+ >+ // Allow tree-abiding pseudo elements after ::slotted >+ test_valid_selector("::slotted(*)::before"); >+ test_valid_selector("::slotted(*)::after"); >+ >+ // Other pseudo elements not valid after ::slotted >+ test_invalid_selector("::slotted(*)::first-line"); >+ test_invalid_selector("::slotted(*)::first-letter"); >+ test_invalid_selector("::slotted(*)::selection"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-slot.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-slot.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1f4aa75ae60ec5ee5f6863aace8678584e4e6934 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-slot.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<title>CSS Test: ::slotted() not matching slot elements</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="host" style="color:green">This text should be green.</div> >+<script> >+ test(() => { >+ let root = host.attachShadow({mode:"open"}); >+ root.innerHTML = '<div><slot id="slot"></slot><div>'; >+ let innerHost = root.firstChild; >+ let innerRoot = innerHost.attachShadow({mode:"open"}); >+ innerRoot.innerHTML = "<style>::slotted(#slot){color:red}</style><slot></slot>"; >+ assert_equals(getComputedStyle(root.querySelector("#slot")).color, "rgb(0, 128, 0)"); >+ }, "Check that ::slotted does not match slot elements"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..63677cf4220eed93ccb1b788d4faa56a7429fa50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-expected.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Scoping: pseudo element after ::slotted - reference</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<div>PASS</div> >+<div>PASS</div> >+<div style="color:green">PASS</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html >new file mode 100644 >index 0000000000000000000000000000000000000000..08e6dcc018fa96e478371c912ed11a5a50a63470 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Scoping: pseudo element after ::slotted</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo"> >+<link rel="match" href="slotted-with-pseudo-element-ref.html"> >+<div id="host1"><span></span></div> >+<div id="host2"><span></span></div> >+<div id="host3"><span></span></div> >+<style> >+ #host3 > span::before { content: "PASS" } >+</style> >+<script> >+ function attachShadowWithSlottedStyle(host, styleString) { >+ var root = host.attachShadow({mode:"open"}); >+ root.innerHTML = "<style>"+styleString+"</style><slot/>"; >+ } >+ >+ attachShadowWithSlottedStyle(host1, "::slotted(span)::before { content: 'PASS' }"); >+ attachShadowWithSlottedStyle(host2, "::slotted(span)::after { content: 'PASS' }"); >+ attachShadowWithSlottedStyle(host3, "::slotted(span)::before { content: 'FAIL'; color: green }"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..24b5e0d5f53d8fab39a2d1699f77ccef417ef6b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Scoping Module Level 1 - A green box reference</title> >+ <link rel="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"/> >+</head> >+<body> >+ <p>Test passes if you see a single 100px by 100px green box below.</p> >+ <div style="width: 100px; height: 100px; background: green;"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a91fca8ce132770b6d031fe9a3abacf8d40a66f6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: title attribute in stylesheets not in the document tree is ignored</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#preferred-css-style-sheet-set-name"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-style-title"> >+<link rel="help" href="https://github.com/w3c/webcomponents/issues/535"> >+<link rel="match" href="reference/green-box.html"> >+<p>Test passes if you see a single 100px by 100px green box below.</p> >+<div id="host"></div> >+<script> >+ host.attachShadow({ mode: "open" }).innerHTML = ` >+ <style> >+ div { width: 100px; height: 100px; } >+ </style> >+ <style title="Foo"> >+ div { background: purple } >+ </style> >+ <style title="Bar"> >+ div { background: green } >+ </style> >+ <div></div> >+ `; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2843ada3eead2526e80797e9634841a0a12fa94f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-002.html >@@ -0,0 +1,36 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: title attribute in stylesheets not in the document tree is ignored</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#preferred-css-style-sheet-set-name"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-style-title"> >+<link rel="help" href="https://github.com/w3c/webcomponents/issues/535"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="host"></div> >+<script> >+test(function() { >+ host.attachShadow({ mode: "open" }).innerHTML = ` >+ <style> >+ div { width: 100px; height: 100px; } >+ </style> >+ <style title="Foo"> >+ div { background: purple } >+ </style> >+ <style title="Bar"> >+ div { background: green } >+ </style> >+ <div></div> >+ `; >+ assert_equals(host.shadowRoot.styleSheets.length, 3); >+ for (let sheet of host.shadowRoot.styleSheets) { >+ assert_equals(sheet.title, null, "Sheet outside of the document generates no setter"); >+ sheet.title = "Foo"; >+ assert_equals(sheet.title, null, "Mutation doesn't change the sheet title"); >+ } >+ for (let element of host.shadowRoot.querySelectorAll("style")) { >+ element.setAttribute("title", "Foo"); >+ assert_equals(element.sheet.title, null, "Attribute mutation doesn't change the sheet title"); >+ } >+}, "Title attribute in stylesheets not in the document tree is ignored"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/w3c-import.log >index e5a4bb87a000d998a9b31a3cac05e3ffe6b27d8b..73f44c6f43b3fb8ca190ac7a615847f75c736896 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/w3c-import.log >@@ -29,6 +29,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-host-with-before-after.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-invisible-slot-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-invisible-slot.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-nested-slot-display-override.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-root-hides-children-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-root-hides-children.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-slot-display-override-expected.html >@@ -49,4 +51,48 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-with-rules-no-style-leak.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/css-scoping-shadow-with-rules.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-descendant-invalidation.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-dom-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-functional-descendant-invalidation.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-multiple-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-nested-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/host-slotted-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/keyframes-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-assign-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-at-import.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-cascade-order-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-disabled-sheet-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-fallback-dynamic-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-reassign-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/shadow-root-insert-into-document.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-invalidation.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-link.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-parsing.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-slot.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/slotted-with-pseudo-element.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-scoping/stylesheet-title-002.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/basic-shape-circle-ellipse-serialization.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/basic-shape-circle-ellipse-serialization.html >index 9c82039ac4e0f6754ba8d24a919a944254356e58..5e4842d234f6af393a5ee04fa604a63f6db5cae1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/basic-shape-circle-ellipse-serialization.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/basic-shape-circle-ellipse-serialization.html >@@ -35,8 +35,8 @@ checkEquals("ellipse(closest-side farthest-side)", > "ellipse(closest-side farthest-side at 50% 50%)"); > > >-checkEquals("circle(at right 5px top)", "circle(at right 5px top 0%)"); >-checkEquals("ellipse(at right 10px top)", "ellipse(at right 10px top 0%)"); >+checkEquals("circle(at top 0% right 5px)", "circle(at right 5px top 0%)"); >+checkEquals("ellipse(at top 0% right 10px)", "ellipse(at right 10px top 0%)"); > // Remove defaults like closest-side > checkEquals("circle(closest-side at center)", > "circle(at 50% 50%)"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/parsing-testcommon.js b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/parsing-testcommon.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b075882f89aae49b419220b234534241cde5fd42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/parsing-testcommon.js >@@ -0,0 +1,39 @@ >+'use strict'; >+ >+// serializedValue can be the expected serialization of value, >+// or an array of permitted serializations, >+// or omitted if value should serialize as value. >+function test_valid_value(property, value, serializedValue) { >+ if (arguments.length < 3) >+ serializedValue = value; >+ >+ var stringifiedValue = JSON.stringify(value); >+ >+ test(function(){ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ assert_not_equals(div.style.getPropertyValue(property), "", "property should be set"); >+ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ var readValue = div.style.getPropertyValue(property); >+ if (serializedValue instanceof Array) >+ assert_in_array(readValue, serializedValue, "serialization should be sound"); >+ else >+ assert_equals(readValue, serializedValue, "serialization should be canonical"); >+ >+ div.style[property] = readValue; >+ assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip"); >+ >+ }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); >+} >+ >+function test_invalid_value(property, value) { >+ var stringifiedValue = JSON.stringify(value); >+ >+ test(function(){ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ assert_equals(div.style.getPropertyValue(property), ""); >+ }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..0d52bd82b7e13f22a0c26033a1ed51fec84cfc28 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/resources/parsing-testcommon.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e3871d869b4e561b8a98088fc149fbea661a3092 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-image-threshold with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-image-threshold-property"> >+<meta name="assert" content="shape-image-threshold supports only the grammar '<number>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("shape-image-threshold", "auto"); >+test_invalid_value("shape-image-threshold", "10px"); >+test_invalid_value("shape-image-threshold", "100%"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5b77db8e507b6b3eeab2e71cafbe951c006f66ea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-valid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-image-threshold with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-image-threshold-property"> >+<meta name="assert" content="shape-image-threshold supports the full grammar '<number>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("shape-image-threshold", "12.5"); >+test_valid_value("shape-image-threshold", "-7"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4f3b4f26fb747ffeb7944ccdfcf5d143abfccf95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-invalid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-margin with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-margin-property"> >+<meta name="assert" content="shape-margin supports only the grammar '<length> | <percentage>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("shape-margin", "none"); >+test_invalid_value("shape-margin", "10"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..68634b6b97aa35b98e935f8505a44518c0c20a06 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-valid.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-margin with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-margin-property"> >+<meta name="assert" content="shape-margin supports the full grammar '<length> | <percentage>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("shape-margin", "0", "0px"); >+test_valid_value("shape-margin", "10px"); >+test_valid_value("shape-margin", "20em"); >+test_valid_value("shape-margin", "37.5%"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid-position.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid-position.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d2b64b328c3da8db6224f816cb26ebfbbd19f80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid-position.html >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-outside with invalid position values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-values-4/#typedef-position"> >+<meta name="assert" content="shape-outside positions support only the '<position>' grammar."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+// The following were supported in an earlier version of the spec. >+// https://github.com/w3c/csswg-drafts/issues/2140 >+test_invalid_value("shape-outside", "circle(at center left 1px)"); >+test_invalid_value("shape-outside", "circle(at center top 2px)"); >+test_invalid_value("shape-outside", "circle(at right 3% center)"); >+test_invalid_value("shape-outside", "circle(at left 4px top)"); >+test_invalid_value("shape-outside", "circle(at right 5px top)"); >+test_invalid_value("shape-outside", "ellipse(at right top 5px)"); >+test_invalid_value("shape-outside", "ellipse(at bottom 6% center)"); >+test_invalid_value("shape-outside", "ellipse(at bottom 7% left)"); >+test_invalid_value("shape-outside", "ellipse(at bottom right 8%)"); >+test_invalid_value("shape-outside", "ellipse(at right 10px top)"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9f541cf2930b11a5a84c1dc8970cdeb23c49707b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid.html >@@ -0,0 +1,52 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-outside with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-outside-property"> >+<meta name="assert" content="shape-outside supports only the grammar 'none | [ <basic-shape> || <shape-box> ] | <image>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("shape-outside", "auto"); >+test_invalid_value("shape-outside", "ray(0deg)"); >+ >+test_invalid_value("shape-outside", "inset()"); >+test_invalid_value("shape-outside", "inset(123)"); >+test_invalid_value("shape-outside", "inset(1% 2% 3% 4% 5%)"); >+test_invalid_value("shape-outside", "inset(round 0)"); >+test_invalid_value("shape-outside", "inset(0px round)"); >+test_invalid_value("shape-outside", "inset(0px round 123)"); >+test_invalid_value("shape-outside", "inset(0px round 1% 2% 3% 4% 5%)"); >+test_invalid_value("shape-outside", "inset(0px round / 1px)"); >+test_invalid_value("shape-outside", "inset(10px round -20px)"); >+test_invalid_value("shape-outside", "inset(30% round -40%)"); >+ >+test_invalid_value("shape-outside", "circle(123)"); >+test_invalid_value("shape-outside", "circle(at)"); >+test_invalid_value("shape-outside", "circle(10% 20%)"); >+test_invalid_value("shape-outside", "circle(-10px at 20px 30px)"); >+test_invalid_value("shape-outside", "circle(-10% at 20% 30%)"); >+test_invalid_value("shape-outside", "circle(1% 2% at 0% 100%)"); >+ >+test_invalid_value("shape-outside", "ellipse(farthest-side at)"); >+test_invalid_value("shape-outside", "ellipse(1% 2% top right)"); >+test_invalid_value("shape-outside", "ellipse(3%)"); >+test_invalid_value("shape-outside", "ellipse(3% at 100% 0%)"); >+test_invalid_value("shape-outside", "ellipse(10% -20% at 30% 40%)"); >+test_invalid_value("shape-outside", "ellipse(-50px 60px at 70% 80%)"); >+ >+test_invalid_value("shape-outside", "polygon(1%)"); >+ >+// <geometry-box> other than <shape-box> >+test_invalid_value("shape-outside", "fill-box"); >+test_invalid_value("shape-outside", "stroke-box"); >+test_invalid_value("shape-outside", "view-box"); >+ >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid-position.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid-position.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ca01b352b6360f9aadcdce35f41fe9658a5be094 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid-position.html >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-outside with valid position values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-values-4/#typedef-position"> >+<meta name="assert" content="shape-outside positions support the full '<position>' grammar."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+// First serialization is being returned by Firefox/Edge, second by Blink/WebKit. >+test_valid_value("shape-outside", "circle(at 10%)", ["circle(at 10%)", "circle(at 10% 50%)"]); >+test_valid_value("shape-outside", "circle(at 20% 30px)"); >+test_valid_value("shape-outside", "circle(at 30px center)", ["circle(at 30px center)", "circle(at 30px 50%)"]); >+test_valid_value("shape-outside", "circle(at 40px top)", ["circle(at 40px top)", "circle(at 40px 0%)"]); >+test_valid_value("shape-outside", "circle(at bottom 10% right 20%)", ["circle(at bottom 10% right 20%)", "circle(at 80% 90%)"]); >+test_valid_value("shape-outside", "circle(at bottom right)", ["circle(at bottom right)", "circle(at 100% 100%)"]); >+test_valid_value("shape-outside", "circle(at center)", ["circle(at center)", "circle(at 50% 50%)"]); >+test_valid_value("shape-outside", "circle(at center 50px)", ["circle(at center 50px)", "circle(at 50% 50px)"]); >+test_valid_value("shape-outside", "circle(at center bottom)", ["circle(at center bottom)", "circle(at 50% 100%)"]); >+test_valid_value("shape-outside", "circle(at center center)", ["circle(at center center)", "circle(at 50% 50%)"]); >+test_valid_value("shape-outside", "circle(at center left)", ["circle(at center left)", "circle(at 0% 50%)"]); >+test_valid_value("shape-outside", "circle(at left)", ["circle(at left)", "circle(at 0% 50%)"]); >+test_valid_value("shape-outside", "circle(at left bottom)", ["circle(at left bottom)", "circle(at 0% 100%)"]); >+test_valid_value("shape-outside", "circle(at left center)", ["circle(at left center)", "circle(at 0% 50%)"]); >+test_valid_value("shape-outside", "circle(at right 40%)", ["circle(at right 40%)", "circle(at 100% 40%)"]); >+test_valid_value("shape-outside", "circle(at right 30% top 60px)", ["circle(at right 30% top 60px)", "circle(at 70% 60px)"]); >+test_valid_value("shape-outside", "circle(at top)", ["circle(at top)", "circle(at 50% 0%)"]); >+test_valid_value("shape-outside", "circle(at top center)", ["circle(at top center)", "circle(at 50% 0%)"]); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ae0e0bfe29e8ef87d959be9d26806e197747a8bf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid.html >@@ -0,0 +1,66 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Shapes Module Level 1: parsing shape-outside with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/#shape-outside-property"> >+<meta name="assert" content="shape-outside supports the full grammar 'none | [ <basic-shape> || <shape-box> ] | <image>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("shape-outside", "none"); >+ >+// <basic-shape> >+test_valid_value("shape-outside", "inset(100%)"); >+test_valid_value("shape-outside", "inset(0 1px)", "inset(0px 1px)"); >+test_valid_value("shape-outside", "inset(0px 1px 2%)"); >+test_valid_value("shape-outside", "inset(0px 1px 2% 3em)"); >+test_valid_value("shape-outside", "inset(0px round 100%)"); >+test_valid_value("shape-outside", "inset(0px round 0 1px)", "inset(0px round 0px 1px)"); >+test_valid_value("shape-outside", "inset(0px round 0px 1px 2%)"); >+test_valid_value("shape-outside", "inset(0px round 0px 1px 2% 3em)"); >+test_valid_value("shape-outside", "inset(10px round 20% / 0px 1px 2% 3em)"); >+ >+test_valid_value("shape-outside", "circle()", "circle(at 50% 50%)"); >+test_valid_value("shape-outside", "circle(1px)", "circle(1px at 50% 50%)"); >+test_valid_value("shape-outside", "circle(closest-side)", "circle(at 50% 50%)"); >+test_valid_value("shape-outside", "circle(at 10% 20%)"); >+test_valid_value("shape-outside", "circle(farthest-side at center top)", "circle(farthest-side at 50% 0%)"); >+test_valid_value("shape-outside", "circle(4% at top right)", "circle(4% at 100% 0%)"); >+ >+test_valid_value("shape-outside", "ellipse()", "ellipse(at 50% 50%)"); >+test_valid_value("shape-outside", "ellipse(3% 2%)", "ellipse(3% 2% at 50% 50%)"); >+test_valid_value("shape-outside", "ellipse(closest-side 1px)", "ellipse(closest-side 1px at 50% 50%)"); >+test_valid_value("shape-outside", "ellipse(at 10% 20%)"); >+test_valid_value("shape-outside", "ellipse(farthest-side 4% at bottom left)", "ellipse(farthest-side 4% at 0% 100%)"); >+ >+test_valid_value("shape-outside", "polygon(1% 2%)"); >+test_valid_value("shape-outside", "polygon(nonzero, 1px 2px, 3em 4em)", "polygon(1px 2px, 3em 4em)"); >+test_valid_value("shape-outside", "polygon(evenodd, 1px 2px, 3em 4em, 5pt 6%)"); >+ >+// <shape-box> >+test_valid_value("shape-outside", "border-box"); >+test_valid_value("shape-outside", "padding-box"); >+test_valid_value("shape-outside", "content-box"); >+test_valid_value("shape-outside", "margin-box"); >+ >+// basic-shape> <shape-box> >+test_valid_value("shape-outside", "circle(7% at 8% 9%) border-box"); >+ >+// <shape-box> basic-shape> >+test_valid_value("shape-outside", "border-box circle(7% at 8% 9%)"); >+ >+// <image> >+// Spec is silent about url serialization. >+// Blink, Edge, Firefox add quotes. WebKit removes quotes. >+test_valid_value("shape-outside", "url(https://example.com/)", ["url(https://example.com/)", "url(\"https://example.com/\")"]); >+test_valid_value("shape-outside", "url(\"https://example.com/\")", ["url(https://example.com/)", "url(\"https://example.com/\")"]); >+test_valid_value("shape-outside", "cross-fade(url(\"https://example.com/\"), green)"); >+test_valid_value("shape-outside", "linear-gradient(yellow, blue)"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..720ac15d203c8252fd4f99f1412303adc05cd0ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/w3c-import.log >@@ -0,0 +1,24 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-image-threshold-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-margin-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid-position.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid-position.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/parsing/shape-outside-valid.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2fd6df981961ea09fe44fa16912be996628b38cb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative-expected.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<style> >+.test { >+ width: 200px; >+ overflow: hidden; >+} >+ >+.float { >+ float: left; >+ width: 50%; >+ height: 100px; >+ >+ background: orange; >+ clip-path: polygon(0 0, 100% 100%, 0 100%); >+} >+ >+.flex { >+ display: flex; >+ height: 50px; >+ background: rebeccapurple; >+} >+</style> >+<div class="test"> >+ <div class="float"></div> >+ <div class="flex"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cfb5d46a0db6745a4aa735b51342d198e2ab80ec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<link rel="match" href="reference/shape-outside-formatting-context-ref.html"> >+<link rel="help" href="https://drafts.csswg.org/css-shapes/"> >+<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1970"> >+<meta name="assert" content="The test verifies that a new formatting context does *not* get sized and positioned based off the float area (defined by shape outside)."> >+<style> >+.test { >+ width: 200px; >+ overflow: hidden; >+} >+ >+.float { >+ float: left; >+ width: 50%; >+ height: 100px; >+ >+ background: orange; >+ shape-outside: polygon(0 0, 100% 100%, 0 100%); >+ clip-path: polygon(0 0, 100% 100%, 0 100%); >+} >+ >+.flex { >+ display: flex; >+ height: 50px; >+ background: rebeccapurple; >+} >+</style> >+<div class="test"> >+ <div class="float"></div> >+ <div class="flex"></div> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..22c5481e926f942620e0ee6d9914a9a908ea6c3e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/formatting-context/shape-outside-formatting-context.tentative.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..092840901fcae825853506ee9414eef87df182d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009-expected.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> >+ </head> >+ <style> >+ body { >+ margin: 0; >+ } >+ #container { >+ position: relative; >+ } >+ #line { >+ position: absolute; >+ top: 0px; >+ left: 100px; >+ width: 2px; >+ height: 200px; >+ border-left: 2px solid blue; >+ } >+ #square { >+ position: absolute; >+ top: 80px; >+ left: 60px; >+ width: 40px; >+ height: 40px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square to the left of the blue line. There should be no red.</p> >+ <div id="container"> >+ <div id="line"></div> >+ <div id="square"></div> >+ </div> >+ </body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..67786bc4f9e70e984cd3e7e72a491c54ad455b77 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: right float, shape-outside: border-box</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-box-values"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#border-box"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"> >+ <link rel="match" href="reference/shape-outside-box-005-ref.html"> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The test verifies that text wraps around a >+ right float with a shape-outside defined as >+ the border box, with negative margins. >+ The float area is clipped to the margin box."> >+ </head> >+ <style> >+ body { >+ margin: 0; >+ } >+ #container { >+ position: relative; >+ } >+ #test-container { >+ font: 40px/1 Ahem, sans-serif; >+ text-align: right; >+ width: 250px; >+ height: 200px; >+ color: green; >+ } >+ #test-shape { >+ float: right; >+ width: 150px; >+ height: 150px; >+ margin: -20px; >+ padding: 10px; >+ border: 10px solid transparent; >+ shape-outside: border-box; >+ } >+ #line { >+ position: absolute; >+ top: 0px; >+ left: 100px; >+ width: 2px; >+ height: 200px; >+ border-left: 2px solid blue; >+ } >+ #failure { >+ position: absolute; >+ top: 80px; >+ left: 60px; >+ width: 40px; >+ height: 40px; >+ background-color: red; >+ z-index: -1; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square to the left of the blue line. There should be no red.</p> >+ <div id="container"> >+ <div id="test-container"> >+ <div id="test-shape"></div> >+ <br/> >+ <br/> >+ X >+ </div> >+ <div id="line"></div> >+ <div id="failure"></div> >+ </div> >+ </body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/w3c-import.log >index 0893aabd467df1506115a52cfee5cc67e99f1ab0..5f9ab5781de9eab05942a6e1726a1de8e12504ab 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/w3c-import.log >@@ -26,3 +26,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-007.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-008-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-box/shape-outside-box-009.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a6228790df7e3d547fb4ad7f58b973257e7ea7b5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html >@@ -0,0 +1,58 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-rl</title> >+ <link rel="author" title="Ting-Yu Lin" href="mailto:aethanyc@gmail.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under vertical-rl."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-rl; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..18253edc778d68292f4806f00f3e212ad5609862 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html >@@ -0,0 +1,58 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-lr</title> >+ <link rel="author" title="Ting-Yu Lin" href="mailto:aethanyc@gmail.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under vertical-lr."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-lr; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9087fb0f093e4e542173ef38c601aceacc7d161c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html >@@ -0,0 +1,58 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: sideways-rl</title> >+ <link rel="author" title="Ting-Yu Lin" href="mailto:aethanyc@gmail.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under sideways-rl."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: sideways-rl; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..05132b45c29bcfdce8c1c40fc4dfba71484f5e9e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html >@@ -0,0 +1,58 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: sideways-lr</title> >+ <link rel="author" title="Ting-Yu Lin" href="mailto:aethanyc@gmail.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under sideways-lr."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: sideways-lr; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the bottom. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the top. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..355ef3fb0294744f6a84040d02ab3ab9e0b64168 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html >@@ -0,0 +1,59 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-rl and text-orientation: sideways</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under vertical-rl and text-orientation: sideways."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-rl; >+ -webkit-text-orientation: sideways; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..789e823245172a36de8b853f69be5fd89a20a441 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html >@@ -0,0 +1,59 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-lr and text-orientation: sideways</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient under vertical-lr and text-orientation: sideways."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-lr; >+ -webkit-text-orientation: sideways; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 50%, transparent 50%); >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 50%, transparent 50%); >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3daa63c497a50e7784a8bed333fa91e82fd0e8a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-rl</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under vertical-rl."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-rl; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..52f5e8a8a271b93658ba71cdd3a3b1efbfe020f3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-lr</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under vertical-lr."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-lr; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html >new file mode 100644 >index 0000000000000000000000000000000000000000..66a2850064063387849a4a03c0592887230ed531 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: sideways-rl</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under sideways-rl."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: sideways-rl; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..91ba3efa08a375e8638a6b078e963340f982b113 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: sideways-lr</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under sideways-lr."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: sideways-lr; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the bottom. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the top. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..216e75b28c3b9c74198f42ccd481d08a4239728f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html >@@ -0,0 +1,62 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-rl and text-orientation: sideways</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under vertical-rl and text-orientation: sideways."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-rl; >+ -webkit-text-orientation: sideways; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3c652d1188d25743dfff91f0492a465519bfa7b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016-expected.html >@@ -0,0 +1,35 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com"/> >+ <style type="text/css"> >+ .container { >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #gradient { >+ float: left; >+ width: 100px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="gradient"></div> >+ xx xx xx xx >+ </div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5e2525d1958d9bec779d257e204b51811d2542dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html >@@ -0,0 +1,62 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: Test float with linear gradient under writing-mode: vertical-lr and text-orientation: sideways</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin"/> >+ <link rel="match" href="reference/shape-outside-linear-gradient-001-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that shape-outside respects a simple linear gradient with shape-margin under vertical-lr and text-orientation: sideways."/> >+ <style type="text/css"> >+ .container { >+ writing-mode: vertical-lr; >+ -webkit-text-orientation: sideways; >+ inline-size: 100px; >+ block-size: 200px; >+ background-color: red; >+ font-family: Ahem; >+ font-size: 50px; >+ line-height: 1; >+ } >+ #test { >+ color: green; >+ } >+ #float-left { >+ /* Note: In .container's writing-mode, "float: left" actually floats >+ us towards the top. */ >+ float: left; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to bottom, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to bottom, green 25%, transparent 25%); >+ shape-margin: 25%; >+ } >+ #float-right { >+ /* Note: In .container's writing-mode, "float: right" actually floats >+ us towards the bottom. */ >+ float: right; >+ inline-size: 100px; >+ block-size: 200px; >+ background: linear-gradient(to top, green 50%, transparent 50%); >+ shape-outside: linear-gradient(to top, green 5%, transparent 5%); >+ shape-margin: 45% >+ } >+ </style> >+ </head> >+ <body> >+ <p> >+ The test passes if you see a green square. There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="float-left"></div> >+ x x x x >+ </div> >+ <div id="test" class="container" style="direction: rtl;"> >+ <div id="float-right"></div> >+ x x x x >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/w3c-import.log >index 5e0bd08b0f5bbf9936376f4fc9d338fd9085d997..b8b3e3f042cc2f51ab668e07fbb0141aa39da20b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/w3c-import.log >@@ -9,7 +9,7 @@ Do NOT modify or remove this file. > > ------------------------------------------------------------------------ > Properties requiring vendor prefixes: >-None >+text-orientation > Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ >@@ -22,6 +22,30 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-004-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-013.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-016.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-radial-gradient-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-radial-gradient-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/gradients/shape-outside-radial-gradient-003.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-001.html >index 8273030bc0af77932e9582e06295c1929b55da72..ac2d92fba434c94a86264547d1845db328387d9e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-001.html >@@ -22,7 +22,7 @@ > } > #image { > float: left; >- width: 150px; >+ width: 100px; > height: 100px; > shape-outside: url("support/left-half-rectangle-70.png"); > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-002.html >index ee2dd75db6a47d4f9c9d39efa11d8094e0c10c9d..01d916d7cb859cd15b15838e59f8e1bb03902d86 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-002.html >@@ -22,7 +22,7 @@ > } > #image { > float: left; >- shape-outside: url('data:image/svg+xml;utf8,<svg width="100px" height="100px" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'); >+ shape-outside: url('data:image/svg+xml;utf8,<svg width="100px" height="100px" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="%23006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'); > } > </style> > </head> >@@ -31,7 +31,7 @@ > The test passes if you see a solid green square. There should be no red. > </p> > <div id="test" class="container"> >- <img id="image" src='data:image/svg+xml;utf8,<svg width="100px" height="100px" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'/> >+ <img id="image" src='data:image/svg+xml;utf8,<svg width="100px" height="100px" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="%23006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'/> > X > X > </div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-005.html >index 2c642c02d0b4c9c113c9773adce0d791485161c7..93f39787ad1ae0fb30444754dd98ebd60a61a8cb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-005.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-005.html >@@ -22,7 +22,7 @@ > } > #image { > float: left; >- shape-outside: url('data:image/svg+xml;utf8,<svg width="100px" height="100px" style="background-color: rgba(0,0,0,0.7)" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'); >+ shape-outside: url('data:image/svg+xml;utf8,<svg width="100px" height="100px" style="background-color: rgba(0,0,0,0.7)" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="%23006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'); > shape-image-threshold: 0.8; > } > </style> >@@ -32,7 +32,7 @@ > The test passes if you see a solid green square. There should be no red. > </p> > <div id="test" class="container"> >- <img id="image" src='data:image/svg+xml;utf8,<svg width="100px" height="100px" style="background-color: rgba(0,0,0,0.7)" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'/> >+ <img id="image" src='data:image/svg+xml;utf8,<svg width="100px" height="100px" style="background-color: rgba(0,0,0,0.7)" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="%23006400" d=" M 0.00 0.00 L 50.00 0.00 C 50.00 33.33 50.00 66.67 50.00 100.00 L 0.00 100.00 L 0.00 0.00 Z" /></svg>'/> > X > X > </div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-010.html >index aedab213e576a62e78a73e92566ecf27ee4516e7..df993be751b4e917843cf03efdf9ed897a86a146 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-010.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-010.html >@@ -40,7 +40,7 @@ > height: 100px; > shape-outside: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAALpJREFUeNrs0UEVABAURcHP5pcRSxpR9FHGhhycuQ3emxI9TnxQ7pxttfH6jhoCIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACIiBABASIgAARECACAsQFQAQEiIAAERAgAgJEQAQEiIAAEZDPuwAAAP//AwCf+AWUylJrCQAAAABJRU5ErkJggg==); > shape-margin: 5%; >- shape-image-threshold: 0.25; >+ shape-image-threshold: 0.7; > } > .blue { > width: 2px; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bd27c919c788ea7799e84cd1d3ed3e109db3e1c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026-expected.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"/> >+ <style type="text/css"> >+ body { >+ margin: 0; >+ } >+ .green, .blue { >+ position: absolute; >+ top: 70px; >+ } >+ .left-rect { >+ left: 10px; >+ } >+ .right-rect { >+ width: 50px; >+ height: 100px; >+ left: 70px; >+ background: rgb(0,100,0); >+ } >+ .blue { >+ width: 2px; >+ height: 100px; >+ background-color: blue; >+ } >+ .left-line { left: 65px; } >+ .right-line { left: 125px } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if the green rectangle on the right is completely between the two blue lines. >+ There should be no red. >+ </p> >+ <div class="green left-rect"> >+ <img src="support/left-half-rectangle.png"> >+ </div> >+ <div class="green right-rect"></div> >+ <div class="blue left-line"></div> >+ <div class="blue right-line"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026.html >new file mode 100644 >index 0000000000000000000000000000000000000000..40482f8b970281da2e19a428ecf4d307f4434f3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026.html >@@ -0,0 +1,69 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Test: left float, url(png), real offset image + shape-margin (px)</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"/> >+ <link rel="match" href="reference/shape-image-006-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that content wraps around all the image pixels >+ + the shape-margin when shape-outside is given a png file. >+ Additionally, the shape-outside: image element is offset from its >+ containing block."/> >+ <style type="text/css"> >+ body { >+ margin: 0; >+ } >+ .container { >+ font: 50px/1 Ahem; >+ padding: 50px; >+ position: absolute; >+ top: 20px; >+ left: -40px; >+ } >+ #test { >+ width: 200px; >+ color: rgb(0,100,0); >+ } >+ #image { >+ float: left; >+ shape-outside: url("support/left-half-rectangle.png"); >+ shape-margin: 10px; >+ } >+ .blue { >+ width: 2px; >+ height: 100px; >+ background-color: blue; >+ } >+ .left-line { left: 65px; } >+ .right-line { left: 125px; } >+ >+ .failure { >+ left: 70px; >+ width: 50px; >+ height: 100px; >+ background-color: red; >+ z-index: -1; >+ } >+ .blue, .failure { >+ position: absolute; >+ top: 70px; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if the green rectangle on the right is completely between the two blue lines. >+ There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <img id="image" src="support/left-half-rectangle.png"/> >+ X<br/>X >+ </div> >+ <div class="blue left-line"></div> >+ <div class="blue right-line"></div> >+ <div class="failure"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bd27c919c788ea7799e84cd1d3ed3e109db3e1c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027-expected.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"/> >+ <style type="text/css"> >+ body { >+ margin: 0; >+ } >+ .green, .blue { >+ position: absolute; >+ top: 70px; >+ } >+ .left-rect { >+ left: 10px; >+ } >+ .right-rect { >+ width: 50px; >+ height: 100px; >+ left: 70px; >+ background: rgb(0,100,0); >+ } >+ .blue { >+ width: 2px; >+ height: 100px; >+ background-color: blue; >+ } >+ .left-line { left: 65px; } >+ .right-line { left: 125px } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if the green rectangle on the right is completely between the two blue lines. >+ There should be no red. >+ </p> >+ <div class="green left-rect"> >+ <img src="support/left-half-rectangle.png"> >+ </div> >+ <div class="green right-rect"></div> >+ <div class="blue left-line"></div> >+ <div class="blue right-line"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2c232ed9a5087e67658494d6b17f9a7b7091bbf4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027.html >@@ -0,0 +1,69 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSS Test: left float, url(png), real negative offset image + shape-margin (px)</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shapes-from-image"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"/> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"/> >+ <link rel="match" href="reference/shape-image-006-ref.html"/> >+ <meta name="flags" content="ahem"/> >+ <meta name="assert" content="This test verifies that content wraps around all the image pixels >+ + the shape-margin when shape-outside is given a png file. >+ Additionally, the shape-outside: image element is given a negative >+ left offset relative to its containing block."/> >+ <style type="text/css"> >+ body { >+ margin: 0; >+ } >+ .container { >+ left: 10px; >+ font: 50px/1 Ahem; >+ } >+ #test { >+ width: 200px; >+ color: rgb(0,100,0); >+ } >+ #image { >+ float: left; >+ shape-outside: url("support/left-half-rectangle.png"); >+ shape-margin: 20px; >+ margin-left: -10px; >+ width: 100px; >+ height: 100px; >+ } >+ .blue { >+ width: 2px; >+ height: 100px; >+ background-color: blue; >+ } >+ .left-line { left: 65px; } >+ .right-line { left: 125px; } >+ >+ .failure { >+ left: 70px; >+ width: 50px; >+ height: 100px; >+ background-color: red; >+ z-index: -1; >+ } >+ .container, .blue, .failure { >+ position: absolute; >+ top: 70px; >+ } >+ </style> >+</head> >+<body> >+ <p> >+ The test passes if the green rectangle on the right is completely between the two blue lines. >+ There should be no red. >+ </p> >+ <div id="test" class="container"> >+ <div id="image"><img src="support/left-half-rectangle.png" style="margin-left: 10px"/></div> >+ X<br/>X >+ </div> >+ <div class="blue left-line"></div> >+ <div class="blue right-line"></div> >+ <div class="failure"></div> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/support/animated.gif b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/support/animated.gif >index 083c9a0a23df0815fe593540ea487ef36119ef4f..9e424df7cdfb6b228b18297334fba7cabdb270cd 100644 >GIT binary patch >delta 302 >zcmbQi_n6Jt-P6s&GBJfAg<&BB!~g&PfeauC1d2adI0YFP7<7ObD44>)!1S-Df92`9 >z43h&{ni;t!Uu7v_lIWc5&8p4#Z?Y9zNIm11U4Q$|zy4mn^FRNIW9A+a8R8u?EYeTh >zs93=v`NHC)MCMEPnU)nNe=hqu^Sb6Pwx}p`tE{XptyNK{ZoTB<I<5KJvpREiXZFh3 >zC#7F{bMk1~c&^EK(=lhoofADTVmNs<ay?>meLMax-+NZ~`Cd*r^>glVdF$HwmhU_F >z?wK4{)P9Zs9{ySN{qhU;_rHHHVsFa$l1C-tL&E+Rc5bGC7XnI$8wI8Po`g?)<SNl1 >s{WA5)4Z(ZveT=Hpwp0Wqdri>x{H4vn0Q5Ga2m>>+x9`lEY|VBT0GmR7*Z=?k > >delta 1275 >zcmaFNHiNI;-P6s&GBJfAg<&ES!~g&PfeaAIz@Ye_JHj_W!6mUI5lGwER}>^BXQ!4Z >zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8hBDWwn >zwIorYA~z?m*s8)-DKRBKDb)(d1_|reD=C20lw{i~If7&qK$be^7o{qg>KW@M8yFfY >zn3?GrnwXlI8R{q)85kPr8vv1+uAzyQshO3LxdId@0j(=aNwW%aaf4b0<k>1^l#~=$ >z>Fbx5m+O@q>*W`v>l<2HT7t|lGSV$dsZY}_uFNY*tkBIXR)!hjl3JWxlvz-cnV+Ws >zGBPnKzqG_w3FuUaCvpqm=H?aafjy*`oS&;-kyxN_sAr&$q|nzFztZ~LT)6V$lAu(C >zi?Nzq98y`3svneEoL^d$oC;K~46>`h%DE^tu_V7JBtJg~7LEZK`6c<q8TkbY&cS91 >z8or6inRy@qO|TAMUn|eN;*!MryyR3*7h5HuA$pmaDOOI#mWFNy#wN}dE|!LduEtJA >zMrLjnu14k-7N*X|7M3v0F8Rr&xv6<2Fuf@Vy{0(zf)Ye-0nlof)S}F?)D*X({Q6u4 >zu(z!;L9W5>7$ckpLiMKLc8oDjz4}1c=oi%kqZcW<!D5g^1Y*LIFOUPz0I7MvR9^&4 >z-i-hM{r&U%*Uul{zkU7k`P0V_@87+B^ZM1x7tfzPee(Fx!w2{8-Mw@B*3BE&uU)-z >z`O?J;=g*xzbNbZD6UUDoJ#zTa!2|pE?XBOld)Lk#+qZ4qvU$_S4eQsfU9)=C$`#9( >zEnTvB(ZU7u=gplnd)CYu)2B_HGI`R(3H^P&J>6ZM9qnzcEzM1h4fS=kHPuy>73F26 >zCB;RB1^IcoIoVm68R==MDalER3Gs2UG0{<x5#eE>A;Cd`0selzKHgrQ9`0_gF3wJl >z4)%7Dwl>yQmKNq_rY6Qlh6eh2x;olgni}eAsw&D#iVE^_vNF<Ak`m%#q9VdVf&%<} >zygb}ooE+?ItSrn-jKEUjCkv+_0~3P|u*3is9VrY9O#gfOSDv2BG|{-3QETG%5~fb^ >z$-0c%jO!*xGJ4lDueknZ+i%|f)6c)``rCK@_4hyf{_{&{Sa?KaRCLT(vE#&z7e6>8 >zH7z|OGb=l1uH1R@=F6X)Qd(ACQCU@8vsUdob?enHE@^FR@96C6?%At%pT7P2H@A$A >mjZaKYP0yS)d)7pP-NY(_>ZUtWfNpxrzj$&2qwnOKOkDsYSkp`Z > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/w3c-import.log >index df998decc27cd917f8c04a6f781debd8863cf29c..09e7c6249e4e4c060944e42ea020bc89a29830e9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/w3c-import.log >@@ -66,3 +66,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-024.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-025-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-025.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-026.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/shape-image/shape-image-027.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html >index 2141c12efaba60e6288ac71b65b9b1efb09423db..b00f6c475831e9827159b2f4e2b91a2c18889a26 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/circle/shape-outside-circle-027.html >@@ -36,7 +36,7 @@ > padding: 10px; > border: 10px solid transparent; > shape-margin: 15px; >- shape-outside: margin-box circle(35% at 85px 75px); >+ shape-outside: margin-box circle(60px); > } > #line { > position: absolute; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-015.html >index 3502f8b960adae35f499ca26637b992c17122d37..1a434a0ef6e64a89fff4054bbfe374deca14819e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-015.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-015.html >@@ -34,7 +34,7 @@ > margin: 10px; > padding: 10px; > border: 10px solid transparent; >- shape-outside: padding-box ellipse(closest-side at 75px 80px); >+ shape-outside: padding-box ellipse(closest-side closest-side at 75px 80px); > } > #line { > position: absolute; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html >index 3cf6089f11a15380905e0cd87e2968117c5436be..fd9b816d4a1a37b25cd92932a771058923d0a066 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/ellipse/shape-outside-ellipse-017.html >@@ -36,7 +36,7 @@ > padding: 10px; > border: 10px solid transparent; > shape-margin: 10px; >- shape-outside: content-box ellipse(farthest-side); >+ shape-outside: content-box ellipse(farthest-side closest-side); > } > #line { > position: absolute; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html >index 72147aaf5da4052fabecaf5895659492924b2813..49627c8f1f0af9c1310164aa9d439958fa09aaa6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-010.html >@@ -19,8 +19,7 @@ > #test-container { > width: 200px; > height: 200px; >- font-family: Ahem; >- font-size: 25px; >+ font: 25px/1 Ahem; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html >index 9a651844dc0d333fe1a0d8d38bbbe6c46a16cb18..96d242148b026402fa8b666b98823d5a69a50a87 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-011.html >@@ -21,6 +21,7 @@ > height: 200px; > font-family: Ahem; > font-size: 25px; >+ line-height: 1; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html >index d7988c251f06551149e7b266f26a0ce3747e5e1d..b9dbe52bbccdd6563642ca2f146dde020d61b829 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-012.html >@@ -22,6 +22,7 @@ > height: 200px; > font-family: Ahem; > font-size: 25px; >+ line-height: 1; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html >index 03e4baaa987593f2d0704cef279ad0e6b3947db2..d49dd703cc7b6d993fcececae047884f3312e2a1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-013.html >@@ -22,6 +22,7 @@ > height: 200px; > font-family: Ahem; > font-size: 25px; >+ line-height: 1; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html >index bb791a5285a71cbfb865d8de35210890179002db..30604af7613668e2934a2bc60adf03ccdd57b722 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html >@@ -22,6 +22,7 @@ > height: 200px; > font-family: Ahem; > font-size: 25px; >+ line-height: 1; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html >index b2e0e06b03061c36418110cabe4b9a03851dfa58..da54fb23dadb674c93754c4a402c4431405cc9d4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html >@@ -22,6 +22,7 @@ > height: 200px; > font-family: Ahem; > font-size: 25px; >+ line-height: 1; > background-color: red; > color: green; > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e2a5fae12de6df57903ccdaf878c94417667ae2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028-expected.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> >+ </head> >+ <style> >+ #shape { >+ margin-left: 25px; >+ width: 200px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="shape"></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2e0d9abed541095c626ceebaddce834e3ab5376d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028.html >@@ -0,0 +1,56 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: left float, inset, px units</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-inset"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"> >+ <link rel="match" href="reference/shape-outside-inset-010-ref.html"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The test verfies that text flows around a >+ right float with a shape-outside defined as >+ an inset rounded rectangle in px units with >+ a shape-margin."> >+ </head> >+ <style> >+ #container { >+ position: relative; >+ margin-left: 25px; >+ } >+ #test-container { >+ width: 200px; >+ height: 200px; >+ font: 25px/1 Ahem; >+ background-color: red; >+ color: green; >+ text-align: right; >+ } >+ #test-shape { >+ float: right; >+ width: 200px; >+ height: 200px; >+ background-color: green; >+ shape-margin: 10px; >+ shape-outside: inset(60px 10px 60px 110px round 20px); >+ } >+ #static-shape { >+ position: absolute; >+ left: 100px; >+ width: 100px; >+ height: 100px; >+ top: 50px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="container"> >+ <div id="test-container"> >+ <div id="test-shape"></div> >+ XXXXXXXX XXXXXXXX XXXX XXXX XXXX XXXX XXXXXXXX XXXXXXXX >+ </div> >+ <div id="static-shape"></div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e2a5fae12de6df57903ccdaf878c94417667ae2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029-expected.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> >+ </head> >+ <style> >+ #shape { >+ margin-left: 25px; >+ width: 200px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="shape"></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fdf226ee09cc86e44648a9de85edbce185be4d0c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029.html >@@ -0,0 +1,55 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: left float, inset, px units</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-inset"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"> >+ <link rel="match" href="reference/shape-outside-inset-010-ref.html"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The test verfies that text flows around a >+ right float with a shape-outside defined as >+ an inset irregular elliptically rounded >+ rectangle in px units with a shape-margin."> >+ </head> >+ <style> >+ #container { >+ position: relative; >+ margin-left: 25px; >+ } >+ #test-container { >+ width: 200px; >+ height: 200px; >+ font: 25px/1 Ahem; >+ background-color: red; >+ color: green; >+ text-align: right; >+ } >+ #test-shape { >+ float: right; >+ width: 200px; >+ height: 200px; >+ shape-margin: 10px; >+ shape-outside: inset(60px 10px 60px 110px round 70px 0px 0px 10px / 10px 0px 0px 20px); >+ } >+ #static-shape { >+ position: absolute; >+ left: 100px; >+ width: 100px; >+ height: 100px; >+ top: 50px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="container"> >+ <div id="test-container"> >+ <div id="test-shape"></div> >+ XXXXXXXX XXXXXXXX XXXX XXXX XXXX XXXX XXXXXXXX XXXXXXXX >+ </div> >+ <div id="static-shape"></div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e2a5fae12de6df57903ccdaf878c94417667ae2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030-expected.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"> >+ </head> >+ <style> >+ #shape { >+ margin-left: 25px; >+ width: 200px; >+ height: 200px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="shape"></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0daa382f154409e2fc72379efe1502733c5bfdfd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030.html >@@ -0,0 +1,67 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: left float, offset inset, px units</title> >+ <link rel="author" title="Brad Werth" href="mailto:bwerth@mozilla.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-inset"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property"> >+ <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property"> >+ <link rel="match" href="reference/shape-outside-inset-010-ref.html"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="The test verfies that text flows around a >+ right float with a shape-outside defined as >+ an inset irregular elliptically rounded >+ rectangle in px units with a shape-margin. >+ Additionally, the shape-outside: inset element is >+ offset from its containing block."> >+ </head> >+ <style> >+ #container { >+ position: relative; >+ margin-left: 25px; >+ } >+ #red { >+ position: absolute; >+ width: 200px; >+ height: 200px; >+ background-color: red; >+ } >+ #test-container { >+ width: 200px; >+ height: 200px; >+ font: 25px/1 Ahem; >+ color: green; >+ text-align: right; >+ padding: 50px; >+ position: absolute; >+ top: -50px; >+ left: -50px; >+ } >+ #test-shape { >+ float: right; >+ width: 200px; >+ height: 200px; >+ shape-margin: 10px; >+ shape-outside: inset(60px 10px 60px 110px round 70px 0px 0px 10px / 10px 0px 0px 20px); >+ } >+ #static-shape { >+ position: absolute; >+ left: 100px; >+ width: 100px; >+ height: 100px; >+ top: 50px; >+ background-color: green; >+ } >+ </style> >+ <body> >+ <p>The test passes if there is a green square and no red.</p> >+ <div id="container"> >+ <div id="red"></div> >+ <div id="test-container"> >+ <div id="test-shape"></div> >+ XXXXXXXX XXXXXXXX XXXX XXXX XXXX XXXX XXXXXXXX XXXXXXXX >+ </div> >+ <div id="static-shape"></div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/w3c-import.log >index b79570bc2b7e6540c09407d686832c97f744469f..858a70ed52d89e3b4b6c7315b8bc3e6a948d3346 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/w3c-import.log >@@ -26,3 +26,9 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-014.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-028.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-029.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/supported-shapes/inset/shape-outside-inset-030.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/values/support/parsing-utils.js b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/values/support/parsing-utils.js >index cc174ecb7faad70e2a4842fceb93e44b71ea321b..68b0c1b1f7c4641cc8e28eb0dca52163b71eb1f7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/values/support/parsing-utils.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/shape-outside/values/support/parsing-utils.js >@@ -534,65 +534,6 @@ var validPositions = [ > ["60% center", "60% 50%"], > ["60u1 center", "60u1 50%"], > >-////// [ keyword | keyword percent ], [ keyword | keyword length ] x 5 keywords >- ["center top 50%", "50% 50%"], >- ["center top 50u1", "50% 50u1"], >- ["center left 50%", "50% 50%"], >- ["center left 50u1", "50u1 50%"], >- ["center right 70%", "30% 50%"], >- ["center right 70u1", "right 70u1 top 50%"], >- ["center bottom 70%", "50% 30%"], >- ["center bottom 70u1", "left 50% bottom 70u1"], >- >- ["left top 50%", "0% 50%"], >- ["left top 50u1", "0% 50u1"], >- ["left bottom 70%", "0% 30%"], >- ["left bottom 70u1", "left 0% bottom 70u1"], >- >- ["top left 50%", "50% 0%"], >- ["top left 50u1", "50u1 0%"], >- ["top right 70%", "30% 0%"], >- ["top right 70u1", "right 70u1 top 0%"], >- >- ["bottom left 50%", "50% 100%"], >- ["bottom left 50u1", "50u1 100%"], >- ["bottom right 70%", "30% 100%"], >- ["bottom right 70u1", "right 70u1 top 100%"], >- >- ["right bottom 70%", "100% 30%"], >- ["right bottom 70u1", "left 100% bottom 70u1"], >- ["right top 50%", "100% 50%"], >- ["right top 50u1", "100% 50u1"], >- >-////// [ keyword percent | keyword], [ keyword length | keyword ] x 5 keywords >- ["left 50% center", "50% 50%"], >- ["left 50u1 center", "50u1 50%"], >- ["left 50% top", "50% 0%"], >- ["left 50u1 top", "50u1 0%"], >- ["left 50% bottom", "50% 100%"], >- ["left 50u1 bottom", "50u1 100%"], >- >- ["top 50% center", "50% 50%"], >- ["top 50u1 center", "50% 50u1"], >- ["top 50% left", "0% 50%"], >- ["top 50u1 left", "0% 50u1"], >- ["top 50% right", "100% 50%"], >- ["top 50u1 right", "100% 50u1"], >- >- ["bottom 70% center", "50% 30%"], >- ["bottom 70u1 center", "left 50% bottom 70u1"], >- ["bottom 70% left", "0% 30%"], >- ["bottom 70u1 left", "left 0% bottom 70u1"], >- ["bottom 70% right", "100% 30%"], >- ["bottom 70u1 right", "left 100% bottom 70u1"], >- >- ["right 80% center", "20% 50%"], >- ["right 80u1 center", "right 80u1 top 50%"], >- ["right 80% bottom", "20% 100%"], >- ["right 80u1 bottom", "right 80u1 top 100%"], >- ["right 80% top", "20% 0%"], >- ["right 80u1 top", "right 80u1 top 0%"], >- > ////// [ keyword percent | keyword percent], [ keyword percent | keyword length], > ////// [ keyword length | keyword length], [ keyword length | keyword percent] x 5 keywords > ["left 50% top 50%", "50% 50%"], >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-010.html >index 5b38f70faaa1e093c772affc194935f6c89a6b78..3da207816bc0e94e439ad3ed1e2dce5a25a56c38 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-010.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-010.html >@@ -30,8 +30,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [182, 199, 201, 199, 182, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the circle, > the long green bar is beneath the circle, and no bars intersect the circle. There >@@ -47,8 +52,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [182, 199, 201, 199, 182, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-011.html >index 03e846d6e1ee9da113c21436bcc9f68e5b3e62a7..7ba240a4c5fd6df36cba8f0fb7a4d867ad4dacab 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-011.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-011.html >@@ -30,8 +30,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [218, 236, 238, 236, 218, 160]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the green horizontal bars are to the right of the circle, > and no bars intersect the circle's shadow. There should be no red. >@@ -46,8 +51,5 @@ > <span id="line-5">XXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [218, 236, 238, 236, 218, 160]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-012.html >index 78e850f0642176f234256a97811e31aa7f547ea2..ef67add28afa8464e57e96130ef160d358ea2d01 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-012.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-012.html >@@ -32,8 +32,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [181, 199, 201, 199, 181, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the circle, all > intersect the shadow, none intersect the circle and the long green bar is beneath the >@@ -49,8 +54,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [181, 199, 201, 199, 181, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-013.html >index 57b58bb5aa43108f1befbe3ae1cd7590b72ed3e4..0b8752b75effc821db2c12d612594b80aaa37fb7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-013.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-013.html >@@ -40,8 +40,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [200, 214, 216, 214, 200, 158, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the circle, > the long green bar is beneath the circle, and no bars intersect the circle. There >@@ -59,8 +64,5 @@ > <span id="line-6">XXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [200, 214, 216, 214, 200, 158, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-014.html >index 1fc6b9b363c1076a6ed47ac16a89682e2f1d31cc..98dde72b767874069d3acebb70b42e12986166e8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-014.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-014.html >@@ -44,8 +44,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 3, [182, 198, 200, 198, 182, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the shape, > the long green bar is beneath it, and no bars intersect it. There should be no red. >@@ -61,8 +66,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 3, [182, 198, 200, 198, 182, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-015.html >index 11e657d9998035d3a15d67ac70c55dbb84688918..b015efd21e3acd464221f82619597bae63b49221 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-015.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-015.html >@@ -32,8 +32,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the shape, > the long green bar is beneath it, and no bars intersect it. There should be no red. >@@ -48,8 +53,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-016.html >index 5512b92f75f903d1a1b604c997be3ae0baae6f68..94c085769db016eb8b51f5cfbc4967874b12e153 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-016.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-016.html >@@ -32,8 +32,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the shape, > the long green bar is beneath it, and no bars intersect it. There should be no red. >@@ -48,8 +53,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-017.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-017.html >index 60ed7139593e4de4b3d40ff9bb5a7a07f10eb715..400fdb65ea070e3a2d5c917e916c8280ff44c926 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-017.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-017.html >@@ -31,8 +31,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the shape, > the long green bar is beneath it, and no bars intersect it. There should be no red. >@@ -47,8 +52,5 @@ > <span id="line-5">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [185, 199, 200, 199, 185, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-018.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-018.html >index 82a7cbd333eb8ad3482a123d6413b24b72945338..3425a700bccab086357b77b92f0d4745c5bc3e80 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-018.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-018.html >@@ -37,8 +37,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [48, 88, 128, 168, 180, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the longest green horizontal bar is beneath the triangle and the > rest of them are to its right and none intersect it. There should be no red. >@@ -54,8 +59,5 @@ > <span id="line-5">XXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [48, 88, 128, 168, 180, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-019.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-019.html >index 2d65bcea19698a6b4a2507931e57953437b0a368..2e5cf4343d64b80ec54ab4eb0e7ab8f0ad2afc6e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-019.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/shape-outside-019.html >@@ -39,8 +39,13 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <script src="support/spec-example-utils.js"></script> >+ <script> >+ function checkFloats() { >+ approxShapeTest('test', 'line-', 2, [242, 256, 258, 256, 242, 204, 0]); >+ } >+ </script> > </head> >-<body> >+<body onload="checkFloats();"> > <p> > The test passes if the short green horizontal bars are the right of the black edge > of circle, the long green bar is beneath it, and no bars intersect the black. >@@ -58,8 +63,5 @@ > <span id="line-6">XXXXXXXXXXXXXXX</span> > </div> > <div id="log"></div> >- <script> >- approxShapeTest('test', 'line-', 2, [242, 256, 258, 256, 242, 204, 0]); >- </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/support/spec-example-utils.js b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/support/spec-example-utils.js >index 9f4a19e4c6d29f5f41724a5472f3818449f717c7..c5b0411ca2706444814090f6a7bcfa43d55f5d8a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/support/spec-example-utils.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-shapes/spec-examples/support/spec-example-utils.js >@@ -1,20 +1,11 @@ > function approxShapeTest(testId, linePrefix, epsilon, lineOffsets) { > var isPositioned = { 'relative': true, 'fixed': true, 'absolute': true, 'sticky': true }, >- loops = 0, > testDiv = document.getElementById(testId), > testOffset = isPositioned[getComputedStyle(testDiv).position] ? 0 : testDiv.offsetLeft, > firstLine = document.getElementById(linePrefix + '0'); > > function runTest() { >- if (firstLine.offsetLeft == testOffset) { >- // wait for the shape image to load and layout to happen >- if (loops > 100) >- assert_unreached("Giving up waiting for shape layout to happen!"); >- else >- loops++; >- window.setTimeout(runTest, 5); >- return; >- } >+ assert_not_equals(firstLine.offsetLeft, testOffset, "Shape layout should have happened already."); > > for (var i = 0; i < lineOffsets.length; i++) { > var line = document.getElementById(linePrefix + i); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..85751aba512bc1938bc16f60fe34a28b4b57ae80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/OWNERS >@@ -0,0 +1,2 @@ >+@kojiishi >+@fantasai >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..979512787a18ec9cbed7e9baf4b2cbd57ab99d33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<style> >+div { >+ writing-mode: vertical-rl; >+ text-decoration: line-through; >+ font-family: Times; >+ font-size: 50px; >+} >+</style> >+<div> >+ <span lang="en">ABC</span> >+ <span lang="en">ABC</span> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical.html >new file mode 100644 >index 0000000000000000000000000000000000000000..633c5c00392711f1fe1911a07f9cf53c3cd702e9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-line"> >+<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#propdef-writing-mode"> >+<link rel="match" href="reference/line-through-vertical-ref.html"> >+<style> >+div { >+ writing-mode: vertical-rl; >+ text-decoration: line-through; >+ font-family: Times; >+ font-size: 50px; >+} >+</style> >+<div> >+ <span lang="ja">ABC</span> >+ <span lang="en">ABC</span> >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..33272cbe1da2512c79282895c1eb19bbeccf6d86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-expected.html >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: CSS3 text-decoration-color</title> >+ <style> >+ .underline { >+ text-decoration: underline; >+ } >+ .overline { >+ text-decoration: overline; >+ } >+ .line-through { >+ text-decoration: line-through; >+ } >+ .black-fill { >+ -webkit-text-fill-color: black; >+ } >+ .transparent-fill { >+ -webkit-text-fill-color: transparent; >+ -webkit-text-stroke-width: 1px; >+ -webkit-text-stroke-color: black; >+ } >+ </style> >+ </head> >+ <body> >+ <h3>Each line of this test should match its text decoration color description:</h3> >+ <div class="underline" style="color: blue;"><span style="-webkit-text-fill-color: gray;">Gray text with blue underline</span></div><br/> >+ <div class="overline" style="color: black;"><span style="-webkit-text-fill-color: green;">Green text with black overline</span></div><br/> >+ <div class="line-through" style="color: gold;"><span style="-webkit-text-fill-color: black;">Black text with gold line-through</span></div><br/> >+ <div class="underline" style="color: blue;"> >+ <span class="overline" style="color: gray;"> >+ <span class="line-through" style="color: green;"> >+ <span class="black-fill">Black text with blue underline, gray overline and green line-through</span> >+ </span> >+ </span> >+ </div><br/> >+ <div class="line-through" style="color: green;"> >+ <sub class="overline" style="color: gray;"><span class="black-fill">subscript text</span></sub> >+ <sup class="underline" style="color: blue;"><span class="black-fill">superscript text</span></sup> >+ </div><br/> >+ <div class="underline" style="color: green;"><span class="transparent-fill">Transparent fill with black stroke text and green underline</span></div><br/> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7bc557337f371a27c91007699ec1a3cf99c72c81 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc-expected.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: underline solid green; >+ } >+</style> >+<p>Test that changes in text-decoration-color are recalculated correctly. PASS >+if the text below has a solid green underline, and no red.</p> >+<div id="target"> >+ Filler text >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b7cde934fcfd3c73ac351f7b9566adadad542294 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-color"> >+<link rel="match" href="reference/text-decoration-color-recalc-ref.html"> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: underline solid red; >+ } >+</style> >+<script> >+ onload = function() { >+ target.style.textDecorationColor = "green"; >+ }; >+</script> >+<p>Test that changes in text-decoration-color are recalculated correctly. PASS >+if the text below has a solid green underline, and no red.</p> >+<div id="target"> >+ Filler text >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bc7a1db9fe29fd3854d49c7e41ed077a99ff918c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color.html >@@ -0,0 +1,64 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: CSS3 text-decoration-color</title> >+ <link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-color"> >+ <link rel="match" href="reference/text-decoration-color-ref.html"> >+ <style> >+ .underline { >+ text-decoration: underline; >+ } >+ .overline { >+ text-decoration: overline; >+ } >+ .line-through { >+ text-decoration: line-through; >+ } >+ #blue-underline { >+ text-decoration: underline; >+ -webkit-text-decoration-color: blue; >+ } >+ #gray-overline { >+ text-decoration: overline; >+ -webkit-text-decoration-color: gray; >+ } >+ #green-line-through { >+ text-decoration: line-through; >+ -webkit-text-decoration-color: green; >+ } >+ #transparent-fill { >+ -webkit-text-fill-color: transparent; >+ -webkit-text-stroke-width: 1px; >+ -webkit-text-stroke-color: black; >+ } >+ </style> >+ </head> >+ <body> >+ <h3>Each line of this test should match its text decoration color description:</h3> >+ >+ <!-- Valid values for underline, overline and line-through text decoration lines --> >+ <div class="underline" style="color: gray; -webkit-text-decoration-color: blue;">Gray text with blue underline</div><br/> >+ <div class="overline" style="color: green; -webkit-text-decoration-color: black;">Green text with black overline</div><br/> >+ <div class="line-through" style="-webkit-text-decoration-color: gold;">Black text with gold line-through</div><br/> >+ >+ <!-- Mix of underline, overline and line-through with different colors for each --> >+ <div> >+ <span id="blue-underline"> >+ <span id="gray-overline"> >+ <span id="green-line-through">Black text with blue underline, gray overline and green line-through</span> >+ </span> >+ </span> >+ </div><br/> >+ >+ <!-- Test behavior on subscript and superscript text --> >+ <div> >+ <span id="green-line-through"> >+ <sub id="gray-overline">subscript text</sub> >+ <sup id="blue-underline">superscript text</sup> >+ </span> >+ </div><br/> >+ >+ <!-- Test with text-fill-color and text-stroke-color values set --> >+ <div class="underline" id="transparent-fill" style="-webkit-text-decoration-color: green;">Transparent fill with black stroke text and green underline</div><br/> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a5c993a60feb112d2e8f7cf77242ba5e4c3484b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010-expected.xht >@@ -0,0 +1,38 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <!-- reftest for text-decoration-line-010.xht --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ .control >+ { >+ text-decoration: none; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong>.</p> >+ <!-- none --> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8509c6f968b5193942529cf932a70c3629ac1db4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010.xht >@@ -0,0 +1,45 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Text Decoration Test: text-decoration-line - none</title> >+ <!-- none --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <link rel="help" title="2.1. Text Decoration Lines: theâtext-decoration-lineâproperty" href="http://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property" /> >+ <link rel="match" href="reference/text-decoration-line-010-ref.xht" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <meta name="assert" content="This test checks that 'text-decoration-line: none' does not produce any text decoration." /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ #test >+ { >+ -webkit-text-decoration-line: none; // The property to be tested >+ } >+ #control >+ { >+ text-decoration: none; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong>.</p> >+ <!-- none --> >+ <div id="test">Text sample ãµã³ãã«æ</div> >+ <div id="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b7e906a8918cf87da7534718b8495a31a4f65177 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011-expected.xht >@@ -0,0 +1,38 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <!-- reftest for text-decoration-line-011.xht --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ .control >+ { >+ text-decoration: underline; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and <strong>underlined</strong>.</p> >+ <!-- underline --> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ac6259b9894aa550a2d4c91fdcadef6b6cd529ee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011.xht >@@ -0,0 +1,45 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Text Decoration Test: text-decoration-line - underline</title> >+ <!-- underline --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <link rel="help" title="2.1. Text Decoration Lines: theâtext-decoration-lineâproperty" href="http://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property" /> >+ <link rel="match" href="reference/text-decoration-line-011-ref.xht" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <meta name="assert" content="This test checks that 'text-decoration-line: underline' produces an horizontal line under the text (underlined)." /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ #test >+ { >+ -webkit-text-decoration-line: underline; // The property to be tested >+ } >+ #control >+ { >+ text-decoration: underline; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and <strong>underlined</strong>.</p> >+ <!-- underline --> >+ <div id="test">Text sample ãµã³ãã«æ</div> >+ <div id="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7bc7423c4916f307b5717a9c4834355a72e563fe >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012-expected.xht >@@ -0,0 +1,38 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <!-- reftest for text-decoration-line-012.xht --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ .control >+ { >+ text-decoration: overline; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and each has <strong>a line over it</strong>.</p> >+ <!-- overline --> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1cb6d68edff9bc1a4368c346ce4af5eb52c9f029 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012.xht >@@ -0,0 +1,45 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Text Decoration Test: text-decoration-line - overline</title> >+ <!-- overline --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <link rel="help" title="2.1. Text Decoration Lines: theâtext-decoration-lineâproperty" href="http://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property" /> >+ <link rel="match" href="reference/text-decoration-line-012-ref.xht" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <meta name="assert" content="This test checks that 'text-decoration-line: overline' produces an horizontal line over the text." /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ #test >+ { >+ -webkit-text-decoration-line: overline; // The property to be tested >+ } >+ #control >+ { >+ text-decoration: overline; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and each has <strong>a line over it</strong>.</p> >+ <!-- overline --> >+ <div id="test">Text sample ãµã³ãã«æ</div> >+ <div id="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..4453792beb3311bf70270a16e3cb1173156488b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013-expected.xht >@@ -0,0 +1,38 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Reftest Reference</title> >+ <!-- reftest for text-decoration-line-013.xht --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ .control >+ { >+ text-decoration: line-through; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and each has<strong> a line through the middle</strong>.</p> >+ <!-- line-through --> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ <div class="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..0d655464da1109110b79de61b9dbdbd4a9fad80f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013.xht >@@ -0,0 +1,45 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Text Decoration Test: text-decoration-line - line-through</title> >+ <!-- line-through --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <link rel="help" title="2.1. Text Decoration Lines: the 'text-decoration-lineâproperty" href="http://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property" /> >+ <link rel="match" href="reference/text-decoration-line-013-ref.xht" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <meta name="assert" content="This test checks that 'text-decoration-line: line-through' produces an horizontal line through the middle of the text." /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ #test >+ { >+ -webkit-text-decoration-line: line-through; // The property to be tested >+ } >+ #control >+ { >+ text-decoration: line-through; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and each has<strong> a line through the middle</strong>.</p> >+ <!-- line-through --> >+ <div id="test">Text sample ãµã³ãã«æ</div> >+ <div id="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-014.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-014.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..28cdfe6ca4fa1bbcff39f402073747bb2cdc00e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-014.xht >@@ -0,0 +1,45 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Text Decoration Test: text-decoration-line - blink</title> >+ <!-- blink --> >+ <link rel="author" title="Taka Oshiyama" href="mailto:takaoshiyama@gmail.com" /> >+ <link rel="help" title="2.1. Text Decoration Lines: theâtext-decoration-lineâproperty" href="http://www.w3.org/TR/css-text-decor-3/#text-decoration-line-property" /> >+ <meta http-equiv="content-language" content="en, ja" /> >+ <meta name="flags" content="animated may" /> >+ <meta name="assert" content="This test checks that 'text-decoration-line: blink' blinks (alternates between visible and invisible)." /> >+ <style type="text/css"> >+ @font-face >+ { >+ font-family: "mplus-1p-regular"; >+ src: url("/fonts/mplus-1p-regular.woff") format("woff"); >+ /* filesize: 803300 bytes (784.5 KBytes) */ >+ /* >+ mplus-1p-regular.ttf can be downloaded at/from [TBD later] >+ */ >+ } >+ div >+ { >+ font-family: "mplus-1p-regular"; >+ //font-size: 1.5em; >+ font-size: 1.0em; >+ line-height: 1.5; >+ } >+ #test >+ { >+ -webkit-text-decoration-line: blink; // The property to be tested >+ } >+ #control >+ { >+ text-decoration: blink; >+ } >+ </style> >+ </head> >+ <body lang="en, ja"> >+ <p>Test passes if the 2 "Text sample ãµã³ãã«æ" are <strong>identical</strong> and <strong>blink</strong> (alternate between visible and invisible).</p> >+ <!-- blink --> >+ <div id="test">Text sample ãµã³ãã«æ</div> >+ <div id="control">Text sample ãµã³ãã«æ</div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f14d25a70ba3ccfc80a99e924bb6b6a7d4694b1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-expected.html >@@ -0,0 +1,33 @@ >+<html> >+<head> >+ <style> >+ .none { text-decoration: none; } >+ .underline { text-decoration: underline; } >+ .overline { text-decoration: overline; } >+ .line-through { text-decoration: line-through; } >+ .all-decorations { text-decoration: underline overline line-through; } >+ </style> >+</head> >+<body> >+ <div>Each line of this test should match its style description (<i>text-decoration-line</i> resets <i>text-decoration</i>, except when the latter is set as <i>important</i>):</div><br/> >+ <div class="underline">This text is underlined <span>(also inside span).</span></div><br/> >+ <div class="overline">This text is overlined <span>(also inside span).</span></div><br/> >+ <div class="line-through">This text has a line-through <span>(also inside span).</span></div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="underline">This text is underlined.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="overline">This text is overlined.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="line-through">This text has a line-through.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="all-decorations">This text is underlined, overlined and has a line-through.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="overline">This text is overlined.</div><br/> >+ <div class="overline">This text is overlined.</div><br/> >+ <div class="underline">This text is underlined.</div> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+ <div class="none">This text contains no decorations.</div><br/> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..92baa6bf43398bc1b337e95a7bb6e5766fc4ecd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc-expected.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: overline solid green; >+ } >+</style> >+<p>Test that changes in text-decoration-line are recalculated correctly. PASS >+if the text below has a solid green overline, and no underline.</p> >+<div id="target"> >+ Filler text >+</div> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc.html >new file mode 100644 >index 0000000000000000000000000000000000000000..321aea9f3d93f31685878a14bfc67f9c3e9cf63e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-line"> >+<link rel="match" href="reference/text-decoration-line-recalc-ref.html"> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: underline solid green; >+ } >+</style> >+<script> >+ onload = function() { >+ target.style.textDecorationLine = "overline"; >+ }; >+</script> >+<p>Test that changes in text-decoration-line are recalculated correctly. PASS >+if the text below has a solid green overline, and no underline.</p> >+<div id="target"> >+ Filler text >+</div> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line.html >new file mode 100644 >index 0000000000000000000000000000000000000000..77d97290820b61b73fe5d3422ac24f4cb5cdd720 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line.html >@@ -0,0 +1,35 @@ >+<html> >+<head> >+ <link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-line"> >+ <link rel="match" href="reference/text-decoration-line-ref.html"> >+ <style> >+ .none { text-decoration: none; } >+ .underline { text-decoration: underline; } >+ .overline { text-decoration: overline; } >+ .line-through { text-decoration: line-through; } >+ .all-decorations { text-decoration: underline overline line-through; } >+ </style> >+</head> >+<body> >+ <div>Each line of this test should match its style description (<i>text-decoration-line</i> resets <i>text-decoration</i>, except when the latter is set as <i>important</i>):</div><br/> >+ <div style="-webkit-text-decoration-line: underline;">This text is underlined <span class="none">(also inside span).</span></div><br/> >+ <div style="-webkit-text-decoration-line: overline;">This text is overlined <span class="none">(also inside span).</span></div><br/> >+ <div style="-webkit-text-decoration-line: line-through;">This text has a line-through <span class="none">(also inside span).</span></div><br/> >+ <div class="underline" style="-webkit-text-decoration-line: none;">This text contains no decorations.</div><br/> >+ <div class="underline" style="-webkit-text-decoration-line: underline;">This text is underlined.</div><br/> >+ <div class="overline" style="-webkit-text-decoration-line: none;">This text contains no decorations.</div><br/> >+ <div class="overline" style="-webkit-text-decoration-line: overline;">This text is overlined.</div><br/> >+ <div class="line-through" style="-webkit-text-decoration-line: none;">This text contains no decorations.</div><br/> >+ <div class="line-through" style="-webkit-text-decoration-line: line-through;">This text has a line-through.</div><br/> >+ <div class="all-decorations" style="-webkit-text-decoration-line: none;">This text contains no decorations.</div><br/> >+ <div class="all-decorations" style="-webkit-text-decoration-line: underline overline line-through;">This text is underlined, overlined and has a line-through.</div><br/> >+ <div style="-webkit-text-decoration-line: underline; text-decoration: none !important;">This text contains no decorations.</div><br/> >+ <div style="-webkit-text-decoration-line: underline; text-decoration: overline !important;">This text is overlined.</div><br/> >+ <div style="-webkit-text-decoration-line: underline !important; text-decoration: overline !important;">This text is overlined.</div><br/> >+ <div style="text-decoration: overline !important; -webkit-text-decoration-line: underline !important;">This text is underlined.</div> >+ <div style="-webkit-text-decoration-line: blink blink;">This text contains no decorations.</div><br/> >+ <div style="-webkit-text-decoration-line: blink underline blink;">This text contains no decorations.</div><br/> >+ <div style="-webkit-text-decoration-line: blink underline overline blink;">This text contains no decorations.</div><br/> >+ <div style="-webkit-text-decoration-line: blink underline overline line-through blink;">This text contains no decorations.</div><br/> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-serialization.tentative.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-serialization.tentative.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2f7b2f55fea63bbb2c752c4c79e4e3415f1578be >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-serialization.tentative.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE HTML> >+<title>text-decoration shorthand serialization</title> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#text-decoration-property"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-declaration-block"> >+<script type="text/javascript" src="/resources/testharness.js"></script> >+<script type="text/javascript" src="/resources/testharnessreport.js"></script> >+<div style="text-decoration: underline"></div> >+<script> >+test(() => { >+ const style = getComputedStyle(document.querySelector('div')); >+ // Chrome serializes as "underline solid rgb(0, 0, 0)" while Edge, Firefox an >+ // Safari use "underline", which Chrome used to do as well. The spec should >+ // probably require "underline": >+ // https://github.com/w3c/csswg-drafts/issues/1564 >+ assert_equals(style.getPropertyValue("text-decoration"), "underline"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cd6f7a049c673e3dc92546f557e1813b20448128 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<link rel="help" title="1.4.2. Text Decoration Line Continuity: the text-decoration-skip-ink property" >+ href="https://drafts.csswg.org/css-text-decor-4/#text-decoration-skip-ink-property" /> >+</head> >+<body> >+<script> >+function testTextDecorationSkipInk() { >+ test( >+ function() { >+ assert_equals( >+ getComputedStyle(document.body)["text-decoration-skip-ink"], >+ "auto", >+ "Must be set to value auto as initial value."); >+ }, >+ 'Body must have text-decoration-skip-ink auto by default.'); >+ test( >+ function() { >+ assert_true(CSS.supports('text-decoration-skip-ink', "auto"), >+ "Text-decoration-skip-ink must allow setting the value auto."); >+ assert_true(CSS.supports('text-decoration-skip-ink', "none"), >+ "Text-decoration-skip-ink must allow setting the value none."); >+ }, >+ 'Property text-decoration-skip-ink must support values auto and none.') >+} >+ >+testTextDecorationSkipInk(); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f80396930e1bbaf06df7b999cf657cf74af99bc0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple-expected.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<style> >+ div { >+ color: #aaa; >+ font-size: 50px; >+ position: relative; >+ display: inline-block; >+ width: 200px; >+ height: 200px; >+ } >+ >+ div > span { position: absolute; } >+ >+ div > span:nth-child(1) { text-decoration: underline solid coral; } >+ div > span:nth-child(2) { text-decoration: overline dashed skyblue; } >+ div > span:nth-child(3) { text-decoration: line-through wavy green; } >+ >+</style> >+<div><span>AAAA</span><span>AAAA</span><span>AAAA</span></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple.html >new file mode 100644 >index 0000000000000000000000000000000000000000..567229f6e570c9bc76528b76aef592e1b6e24c35 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple.html >@@ -0,0 +1,21 @@ >+<!doctype html> >+<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-style"> >+<link rel="match" href="reference/text-decoration-style-multiple-ref.html"> >+<style> >+ div { >+ color: #aaa; >+ font-size: 50px; >+ position: relative; >+ display: inline-block; >+ width: 200px; >+ height: 200px; >+ } >+ >+ div > span { position: absolute; } >+ >+ div > span:nth-child(3) { text-decoration: underline solid coral; } >+ div > span:nth-child(3) > span { text-decoration: overline dashed skyblue; } >+ div > span:nth-child(3) > span > span { text-decoration: line-through wavy green; } >+ >+</style> >+<div><span>AAAA</span><span>AAAA</span><span><span><span>AAAA</span></span></span></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..30592b44cec51eb7f0835c7abc9aaafe7458ceff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc-expected.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: underline dashed green; >+ } >+</style> >+<p>Test that changes in text-decoration-style are recalculated correctly. PASS >+if the text below has a dashed green underline, and not a solid green underline.</p> >+<div id="target"> >+ Filler text >+</div> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d4538e7c7b45356d08cf5dc90273b6aee77c49fa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc.html >@@ -0,0 +1,19 @@ >+<!doctype html> >+<link rel="help" href="https://www.w3.org/TR/css-text-decor-3/#text-decoration-style"> >+<link rel="match" href="reference/text-decoration-style-recalc-ref.html"> >+<style> >+ div { >+ font-size: 50px; >+ text-decoration: underline solid green; >+ } >+</style> >+<script> >+ onload = function() { >+ target.style.textDecorationStyle = "dashed"; >+ }; >+</script> >+<p>Test that changes in text-decoration-style are recalculated correctly. PASS >+if the text below has a dashed green underline, and not a solid green underline.</p> >+<div id="target"> >+ Filler text >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1451ae9c6b5199bacb758f31b906a6753c1f99e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-001.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:underline - visibility:hidden 1</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:underline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an underline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e0d03a40e22e1b46cb6a66a2e143bdce0b4c3436 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-002.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:underline - visibility:hidden 2</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:underline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an underline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e8477be580778b0986626c3b9c069e1d0976107e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-003.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:underline - visibility:hidden 3</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:underline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an underline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-004.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-004.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7e810ac164bc731d65aee2922f48b085ed4dd7f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-004.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:underline - visibility:hidden 4</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:underline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an underline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-005.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-005.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e49dcc821fd403a78b4cd7a21609bd3faeafe1af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-005.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:overline - visibility:hidden 5</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:overline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an overline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-006.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-006.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7ebecdd60f8dd41c251f171a9351d95d72c70768 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-006.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:overline - visibility:hidden 6</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:overline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an overline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-007.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-007.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e95c85e24550c3a0f61247eec2258d35e2a0ed46 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-007.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:overline - visibility:hidden 7</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:overline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an overline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-008.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-008.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..afb394607bedfd62c16c180b979fc5f4eb65170d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-008.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:overline - visibility:hidden 8</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:overline; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be an overline spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-009.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-009.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6ad4988a948ccac4cd197ff491b2a62958fd6b88 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-009.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:line-through - visibility:hidden 9</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:line-through; >+ font-size:80px; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be a line-through spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-010.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-010.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6adec80adf090cfd1ebe3ed95e7b09322665bc9b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-010.xht >@@ -0,0 +1,30 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:line-through - visibility:hidden 10</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:line-through; >+ white-space: nowrap; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be a line-through spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-011.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-011.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..13164729467e78bd9af9c26c73a216aa9235e42b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-011.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:line-through - visibility:hidden 11</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:line-through; >+ white-space: nowrap; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be a line-through spanning the full width of the yellow box.</p> >+ <div id="test"> >+ <span>hidden</span> >+ visible >+ <span>hidden</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-012.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-012.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..904460a7bfeef5a35261641422a5fde2dd07dce4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-012.xht >@@ -0,0 +1,31 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> >+ <title>CSS Test: text-decoration:line-through - visibility:hidden 12</title> >+ <link rel="author" title="James Hopkins" href="http://idreamincode.co.uk/css21testsuite"/> >+<link rel="help" href="https://drafts.csswg.org/css-text-decor/#line-decoration"/> >+ <meta name="flags" content=""/> >+ <meta name="assert" content="Inline element with 'visibility:hidden' must not prevent a text-decoration value being applied to the line box"/> >+ <style type="text/css"> >+ #test{ >+ text-decoration:line-through; >+ white-space: nowrap; >+ background:yellow; >+ float:left; >+ } >+ #test span{ >+ visibility:hidden; >+ } >+ </style> >+ </head> >+ >+ <body> >+ <p>To pass, there <strong>must</strong> be a line-through spanning the full width of the yellow box.</p> >+ <div id="test"> >+ visible >+ <span>hidden</span> >+ visible >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..8380c197b326fa184369094e75c7748fff209ee2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001-expected.xht >@@ -0,0 +1,146 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis - color - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin: 0.6em 0 0; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ .black >+ { >+ color: black; >+ } >+ .blue >+ { >+ color: blue; >+ } >+ .green >+ { >+ color: green; >+ } >+ .red >+ { >+ color: red; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ black >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="black refcommon">●</span></span><span class="common">i<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">e<span class="black refcommon">●</span></span><span class="common">r<span class="black refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="black refcommon">●</span></span><span class="common">i<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">e<span class="black refcommon">●</span></span><span class="common">r<span class="black refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ blue >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="blue refcommon">●</span></span><span class="common">i<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">e<span class="blue refcommon">●</span></span><span class="common">r<span class="blue refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="blue refcommon">●</span></span><span class="common">i<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">e<span class="blue refcommon">●</span></span><span class="common">r<span class="blue refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ green >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="green refcommon">●</span></span><span class="common">i<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">e<span class="green refcommon">●</span></span><span class="common">r<span class="green refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="green refcommon">●</span></span><span class="common">i<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">e<span class="green refcommon">●</span></span><span class="common">r<span class="green refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ red >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="red refcommon">●</span></span><span class="common">i<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">e<span class="red refcommon">●</span></span><span class="common">r<span class="red refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="red refcommon">●</span></span><span class="common">i<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">e<span class="red refcommon">●</span></span><span class="common">r<span class="red refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ current-color >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..b60f03591ed067b8a8411cdad2ea8bcd222a37fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht >@@ -0,0 +1,151 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis - color - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.2. Emphasis Mark Color: the âtext-emphasis-colorâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-color" /> >+ <link rel="match" href="reference/text-emphasis-color-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property describes the foreground color of the emphasis marks." /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .emphasis >+ { >+ text-emphasis-style: filled circle; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ .black >+ { >+ color: black; >+ } >+ .blue >+ { >+ color: blue; >+ } >+ .green >+ { >+ color: green; >+ } >+ .red >+ { >+ color: red; >+ } >+ .test1 >+ { >+ text-emphasis-color: black; >+ } >+ .test2 >+ { >+ text-emphasis-color: blue; >+ } >+ .test3 >+ { >+ text-emphasis-color: green; >+ } >+ .test4 >+ { >+ text-emphasis-color: red; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ black >+ <div class="parent"> >+ <div><span class="emphasis test1">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="black refcommon">●</span></span><span class="common">i<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">l<span class="black refcommon">●</span></span><span class="common">e<span class="black refcommon">●</span></span><span class="common">r<span class="black refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ blue >+ <div class="parent"> >+ <div><span class="emphasis test2">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="blue refcommon">●</span></span><span class="common">i<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">l<span class="blue refcommon">●</span></span><span class="common">e<span class="blue refcommon">●</span></span><span class="common">r<span class="blue refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ green >+ <div class="parent"> >+ <div><span class="emphasis test3">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="green refcommon">●</span></span><span class="common">i<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">l<span class="green refcommon">●</span></span><span class="common">e<span class="green refcommon">●</span></span><span class="common">r<span class="green refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ red >+ <div class="parent"> >+ <div><span class="emphasis test4">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="red refcommon">●</span></span><span class="common">i<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">l<span class="red refcommon">●</span></span><span class="common">e<span class="red refcommon">●</span></span><span class="common">r<span class="red refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ current-color >+ <div class="parent"> >+ <div><span class="emphasis">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..07fcd3fe68a2cfbf81d6c7d67fbc56b4d9948716 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001-expected.xht >@@ -0,0 +1,58 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above left - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin-top: 0.5em; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: -1.4em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..a12dd50f36c98a185f4e7a82b96b98167fb755e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht >@@ -0,0 +1,64 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above left - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-above-left-001-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: above left; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin-top: 0.5em; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: -1.4em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div><span class="test">abc</span> de<br /><br /></div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6be87d7fa723658cf60b1c272df4d260f9dba656 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002-expected.xht >@@ -0,0 +1,65 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above left - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 1.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..bab532b9452074ac8e06ab1319adb80ec286996c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht >@@ -0,0 +1,75 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above left - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-above-left-002-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: above left; >+ } >+ >+ .test-vertical >+ { >+ writing-mode: vertical-rl; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 1.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent test-vertical"> >+ <span class="test">abc</span> de >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ca243a0e083e09a57f0aef535e9bc9960c2c77d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001-expected.xht >@@ -0,0 +1,58 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above right - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin-top: 0.5em; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: -1.4em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..92ca948285b5d76ba8d8f3af190890cbf48bcd0b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht >@@ -0,0 +1,66 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above right - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-above-right-001-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: above right; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin-top: 0.5em; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: -1.4em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div><span class="test">abc</span> de<br /><br /></div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c99186b2c18345f05935912816c4f5a03ccb578f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002-expected.xht >@@ -0,0 +1,66 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above right - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ left: -0.5em; >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 4.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..42cb2aab8874f0870f25cc56d329e3cc870bf9ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht >@@ -0,0 +1,75 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - above right - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-above-right-002-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: above right; >+ } >+ .test-vertical >+ { >+ writing-mode: vertical-rl; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ left: -0.5em; >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 4.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent test-vertical"> >+ <span class="test">abc</span> de >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1a00f0181271cbf55f18d58e7e3cc22b44fc3840 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001-expected.xht >@@ -0,0 +1,54 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below left - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: 1.6em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c178fa4e8a6181b244a1b13bcde57fa416c14d10 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht >@@ -0,0 +1,60 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below left - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-below-left-001-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: below left; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: 1.6em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div><span class="test">abc</span> de<br /><br /></div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..1102ed667ac78e99382f8d2abf34445b283a3c48 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002-expected.xht >@@ -0,0 +1,65 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below left - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 1.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..cb89abfdb4577bad79faec0ed097e09adf6b1523 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht >@@ -0,0 +1,75 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below left - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-below-left-002-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: below left; >+ } >+ >+ .test-vertical >+ { >+ writing-mode: vertical-rl; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 1.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent test-vertical"> >+ <span class="test">abc</span> de >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f94c4ffc35301132ea2de58e13c977119df6b381 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001-expected.xht >@@ -0,0 +1,54 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below right - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: 1.6em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..06d519e8577d5e76ddb3ae82cec95da31b4cbd55 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht >@@ -0,0 +1,62 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below right - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-below-right-001-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: below right; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ width: 6em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0.6em; >+ position: absolute; >+ } >+ .top >+ { >+ top: 1.6em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower block in the square box is identical.</p> >+ <p>horizontal</p> >+ <div class="parent"> >+ <div><span class="test">abc</span> de<br /><br /></div> >+ </div> >+ <br /> >+ <div class="parent"> >+ <div class="margin"> >+ <div class="margin"> >+ <span class="common">a<span class="refcommon top">●</span></span><span class="common">b<span class="refcommon top">●</span></span><span class="common">c<span class="refcommon top">●</span></span> >+ de<br /> >+ <br /> >+ </div> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..307201cd575bb8c96658c8ca22bcb5c38abe3b51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002-expected.xht >@@ -0,0 +1,66 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below right - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ left: -0.5em; >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 4.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..d8321239e7a055147f300385c9aa10c95e72ac9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht >@@ -0,0 +1,75 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-position - below right - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.4. Emphasis Mark Position: the âtext-emphasis-positionâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-position" /> >+ <link rel="match" href="reference/text-emphasis-position-below-right-002-ref.xht"/> >+ <meta name="flags" content="ahem" /> >+ <meta name="assert" content="This property describes where emphasis marks are drawn at." /> >+ <style type="text/css"><![CDATA[ >+ .test >+ { >+ text-emphasis-style: filled circle; >+ text-emphasis-position: below right; >+ } >+ .test-vertical >+ { >+ writing-mode: vertical-rl; >+ } >+ /* the CSS below is not part of the test */ >+ .common >+ { >+ left: -0.5em; >+ line-height: 1em; >+ position: relative; >+ } >+ .displayarea >+ { >+ border: solid 1px gray; >+ padding: 10px; >+ width: 10em; >+ } >+ .floatright >+ { >+ float: right; >+ } >+ .parent >+ { >+ background: yellow; >+ border: solid 1px gray; >+ color: blue; >+ font: 20px/1em ahem; >+ height: 6em; >+ width: 2em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 4.1em; >+ position: absolute; >+ top: 0.1em; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of left and right block in the square box is identical.</p> >+ <p>vertical</p> >+ <div class="displayarea"> >+ <div class="parent floatright"> >+ <span class="common"> a<span class="refcommon">●</span></span><br /> >+ <span class="common"> b<span class="refcommon">●</span></span><br /> >+ <span class="common"> c<span class="refcommon">●</span></span><br /> >+ <br /> >+ <span class="common"> d</span><br /> >+ <span class="common"> e</span><br /> >+ </div> >+ <div class="parent test-vertical"> >+ <span class="test">abc</span> de >+ </div> >+ </div> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6222a7c5ec7d7b05cf235a313bb7e2a49ddc4bbc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001-expected.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Takanori Koroki" href="mailto:tak.koroki@gmail.com"> >+ </head> >+ <body> >+ <p>Test passes if there is no dots above the text of "Text sample".</p> >+ <p>Text sample</p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..afb5f7c3117a6ff08ccce933fa9d77b6f4128208 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001.html >@@ -0,0 +1,30 @@ >+<!DOCTYPE html> >+<html> >+ >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="Koroki Takanori" href="mailto:tak.koroki@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the 'text-emphasis-style' property"> >+ <link rel="match" href="reference/text-emphasis-style-001-ref.html"> >+ <meta name="assert" content="Test checks that 'text-emphasis-style: none' shows no emphasis marks."> >+ <style> >+ >+span { >+ /* This style definition will be overwritten by "text-emphasis-style: none;" >+ If the dots appears above the text as emphasis marks, it means "text-emphasis-style: none" is not working. */ >+ text-emphasis-style: dot; >+} >+ >+#test > .test { >+ text-emphasis-style: none; >+} >+ </style> >+ </head> >+ <body> >+ <p>Test passes if there is no dots above the text of "Text sample".</p> >+ <p id="test"> >+ <span class="test">Text</span> <span class="test">sample</span> >+ </p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4fbf0a03ac611aed893763b8b268f096485d0f2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002-expected.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Reference File</title> >+<link rel="author" title="Yuuki Furukawa" href="mailto:tenderhearted0407@gmail.com"> >+</head> >+<body> >+<p>Test passes if "open dot" is above every single character of "Text sample".</p> >+<div><ruby>T<rt>•</rt>e<rt>•</rt>x<rt>•</rt>t<rt>•</rt></ruby> <ruby>S<rt>•</rt>i<rt>•</rt>m<rt>•</rt>p<rt>•</rt>l<rt>•</rt>e<rt>•</rt></span></div> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3288c5c0f989e74b543efbe4c2d78e745e223f6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Reference File</title> >+<link rel="author" title="Yuuki Furukawa" href="mailto:tenderhearted0407@gmail.com"> >+<link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the âtext-emphasis-styleâ property"> >+<link rel="match" href="reference/text-emphasis-style-002-ref.html"> >+<meta name="assert" content="This test checks 'text-emphasis-style: filled dot;'"> >+<style> >+span{ >+ text-emphasis-style: filled dot; >+} >+</style> >+</head> >+<body> >+<p>Test passes if "open dot" is above every single character of "Text sample".</p> >+<div><span>Text</span> <span>sample</span></div> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b9e4702519ed6c11b1ab7c39dab428692415073e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Tomoyuki Shimizu" href="mailto:tomoyuki.labs@gmail.com"> >+ <!-- link rel="reviewer" title="" href="" --> >+ </head> >+ <body> >+ <p>Test passes if a filled dot is above every single character of "Text Sample".</p> >+ <div><ruby>T<rt>•</rt>e<rt>•</rt>x<rt>•</rt>t<rt>•</rt></ruby> <ruby>s<rt>•</rt>a<rt>•</rt>m<rt>•</rt>p<rt>•</rt>l<rt>•</rt>e<rt>•</rt></ruby></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e528dbc784a1be701ee3d5927c0cb0c929169f76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="TestTWF Tokyo Meetup (Unofficial)" href="mailto:tomoyuki.labs@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the âtext-emphasis-styleâ property"> >+ <link rel="match" href="reference/text-emphasis-style-006.html"> >+ <meta name="assert" content="Test checks 'text-emphasis-style: filled dot'"> >+ <style> >+span { >+ text-emphasis-style: filled dot; >+} >+ </style> >+ </head> >+ <body> >+ <p>Test passes if a filled dot is above every single character of "Text Sample".</p> >+ <div><span>Text</span> <span>sample</span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..af2087c20b291d29fcd453b1d4bcc4e47d2fea44 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Tomoyuki Shimizu" href="mailto:tomoyuki.labs@gmail.com"> >+ <!-- link rel="reviewer" title="" href="" --> >+ </head> >+ <body> >+ <p>Test passes if a filled circle is above every single character of "Text Sample".</p> >+ <div><ruby>T<rt>●</rt>e<rt>●</rt>x<rt>●</rt>t<rt>●</rt></ruby> <ruby>s<rt>●</rt>a<rt>●</rt>m<rt>●</rt>p<rt>●</rt>l<rt>●</rt>e<rt>●</rt></ruby></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b3cab54f70ac9b7b98eda47bd375487f57af046c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="TestTWF Tokyo Meetup (Unofficial)" href="mailto:tomoyuki.labs@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the âtext-emphasis-styleâ property"> >+ <link rel="match" href="reference/text-emphasis-style-007.html"> >+ <meta name="assert" content="Test checks 'text-emphasis-style: filled circle'"> >+ <style> >+span { >+ text-emphasis-style: filled circle; >+} >+ </style> >+ </head> >+ <body> >+ <p>Test passes if a filled circle is above every single character of "Text Sample".</p> >+ <div><span>Text</span> <span>sample</span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c091e57a754e21096749968062a508ec635e1290 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008-expected.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="TestTWF Tokyo Meetup (Unofficial)" href="mailto:ymdsmn@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style"> >+ <meta name="assert" content="Test checks that 'text-emphasis-style: filled double-circle'."> >+ </head> >+ <body> >+ <p>Test passes if "◉" is above every single character of "Text sample"</p> >+ <div> >+ <span><ruby>Text sample<rt>◉◉◉◉◉◉◉◉◉◉</rt></ruby></span>. >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b049ab0db15006cd74e58e46c519d8360a0c4921 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="TestTWF Tokyo Meetup (Unofficial)" href="mailto:ymdsmn@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style"> >+ <link rel="match" href="reference/text-emphasis-style-008-ref.html"> >+ <meta name="assert" content="Test checks that 'text-emphasis-style: filled double-circle'."> >+ <style> >+ span { >+ text-emphasis-style: filled double-circle; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if "◉" is above every single character of "Text sample"</p> >+ <div> >+ <span>Text sample</span>. >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6f894e1161cfd906d90132ef55949aa573be8682 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Yu.Taguchi" href="mailto:taguchu@gmail.com"> >+ <!-- link rel="reviewer" title="" href="" --> >+ </head> >+ <body> >+ <p>Test passes if ﹅ is aborve every single character of"Text sample".</p> >+ <div><ruby class="dot">T<rt>﹅</rt>e<rt>﹅</rt>x<rt>﹅</rt>t<rt>﹅</rt></ruby> <ruby class="circle">s<rt>﹅</rt>a<rt>﹅</rt>m<rt>﹅</rt>p<rt>﹅</rt>l<rt>﹅</rt>e<rt>﹅</rt></span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ec701b4ad6f4897c88d2b8fee616a54f396f133e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis-style</title> >+ <link rel="author" title="Yu.Taguchi" href="mailto:taguchu@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" >+ title="3.1 Emphasis Mark Style: the text-emphasis-style property"> >+ <link rel="match" href="reference/text-emphasis-style-010-ref.html"> >+ <style> >+ span { >+ text-emphasis-style: filled sesame; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if ﹅ is aborve every single character of"Text sample".</p> >+ <div><span>Text</span> <span>sample</span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..32c7ca5e910a89e45c36c432a1527b82d70040f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012-expected.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Reference File</title> >+<link rel="author" title="Yuuki Furukawa" href="mailto:tenderhearted0407@gmail.com"> >+</head> >+<body> >+<p>Test passes if "open dot" is above every single character of "Text sample".</p> >+<div><ruby>T<rt>◦</rt>e<rt>◦</rt>x<rt>◦</rt>t<rt>◦</rt></ruby> <ruby>S<rt>◦</rt>i<rt>◦</rt>m<rt>◦</rt>p<rt>◦</rt>l<rt>◦</rt>e<rt>◦</rt></span></div> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fa22435509c847748fb956cdaa3ef86c0958d280 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS Reference File</title> >+<link rel="author" title="Yuuki Furukawa" href="mailto:tenderhearted0407@gmail.com"> >+<link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the âtext-emphasis-styleâ property"> >+<link rel="match" href="reference/text-emphasis-style-012-ref.html"> >+<meta name="assert" content="This test checks 'text-emphasis-style: open dot;'"> >+<style> >+span { >+ text-emphasis-style: open dot; >+} >+</style> >+</head> >+<body> >+<p>Test passes if "open dot" is above every single character of "Text sample".</p> >+<div><span>Text</span> <span>sample</span></div> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..593d2d28a24c8e0f563a9b60a156c73d42dd8205 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-016.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="Fuyuko Ikeguchi" href="mailto:fuyuko.ikeguchi@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style"> >+ <meta name="assert" content="Test checks that [explanation of what you're trying to test]."> >+ <style> >+ .test { >+ text-emphasis-style: dot; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if the small dot appears above "Text sample".</p> >+ <div><span class="test">Text</span> <span class="test">sample</span></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f1b8d2dcd13562018b1057a9f4a9594ca1176f37 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021-expected.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Reference File</title> >+ <link rel="author" title="Shinsuke Matsuki" href="mailto:shinsk@gmail.com"> >+ <!-- link rel="reviewer" title="" href="" --> >+ </head> >+ <body> >+ <p>Test passes if "^" is above every single character of "Text sample".</p> >+ <div><ruby>T<rt>^</rt>e<rt>^</rt>x<rt>^</rt>t<rt>^</rt></ruby> <ruby>s<rt>^</rt>a<rt>^</rt>m<rt>^</rt>p<rt>^</rt>l<rt>^</rt>e<rt>^</rt></ruby></div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1bf85de4f7ce58fe93abbf652d1e8fa9fa83c2cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021.html >@@ -0,0 +1,22 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSS Text Decoration Test - text-emphasis</title> >+ <link rel="author" title="Shinsuke Matsuki" href="mailto:shinsk@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/css-text-decor-3/#text-emphasis-style" title="3.1. Emphasis Mark Style: the âtext-emphasis-styleâ property"> >+ <link rel="match" href="reference/text-emphasis-style-021-ref.html"> >+ <meta name="assert" content="This test checks 'text-emphasis-style:string'."> >+ <style> >+ span { >+ text-emphasis-style: '^'; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Test passes if "^" is above every single character of "Text sample".</p> >+ <div> >+ <span>Text</span> <span>sample</span> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..82edf8e275613b46bc7026654416397be82d7137 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001-expected.xht >@@ -0,0 +1,143 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - filled - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin: 18px 0 0; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ filled >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled dot >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled double-circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled sesame >+ <div class="parent"> >+ <div class=" margin"> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled triangle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e28c81bb3421c4bc3db3b2dda38d2c8e83d76e54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht >@@ -0,0 +1,149 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - filled - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.1. Emphasis Mark Style: the âtext-emphasis-styleâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-style" /> >+ <link rel="match" href="reference/text-emphasis-style-filled-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property applies emphasis marks to the element's text. " /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ #test1 >+ { >+ text-emphasis-style: filled; >+ } >+ #test2 >+ { >+ text-emphasis-style: filled circle; >+ } >+ #test3 >+ { >+ text-emphasis-style: filled dot; >+ } >+ #test4 >+ { >+ text-emphasis-style: filled double-circle; >+ } >+ #test5 >+ { >+ text-emphasis-style: filled sesame; >+ } >+ #test6 >+ { >+ text-emphasis-style: filled triangle; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ filled >+ <div class="parent"> >+ <div><span id="test1">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled circle >+ <div class="parent"> >+ <div><span id="test2">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled dot >+ <div class="parent"> >+ <div><span id="test3">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled double-circle >+ <div class="parent"> >+ <div><span id="test4">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled sesame >+ <div class="parent"> >+ <div><span id="test5">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ filled triangle >+ <div class="parent"> >+ <div><span id="test6">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..87ce8d4b2fd9497b4f9de28e4032dfe068f3f33d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001-expected.xht >@@ -0,0 +1,56 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - none - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <p>Test passes if a pair of upper and lower "Filler Text" in the square box is identical.</p> >+ <div> >+ none >+ <div class="parent"> >+ <div>Filler Text</div> >+ <br /> >+ <div>Filler Text</div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..9cddac49667487e5412ab72bf3b1decdc2c87528 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001.xht >@@ -0,0 +1,64 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - none - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.1. Emphasis Mark Style: the âtext-emphasis-styleâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-style" /> >+ <link rel="match" href="reference/text-emphasis-style-none-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property applies emphasis marks to the element's text. " /> >+ <style type="text/css"><![CDATA[ >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ #test >+ { >+ text-emphasis-style: none; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower "Filler Text" in the square box is identical.</p> >+ none >+ <div class="parent"> >+ <div><span id="test">Filler</span> Text</div> >+ <br /> >+ <div>Filler Text</div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..24364f6d0090502c3d49b436d2f8a9561e739178 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001-expected.xht >@@ -0,0 +1,143 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - open - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin: 18px 0 0; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ open >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">○</span></span><span class="common">i<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">e<span class="refcommon">○</span></span><span class="common">r<span class="refcommon">○</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">○</span></span><span class="common">i<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">e<span class="refcommon">○</span></span><span class="common">r<span class="refcommon">○</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open dot >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open double-circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">◎</span></span><span class="common">i<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">e<span class="refcommon">◎</span></span><span class="common">r<span class="refcommon">◎</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◎</span></span><span class="common">i<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">e<span class="refcommon">◎</span></span><span class="common">r<span class="refcommon">◎</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open sesame >+ <div class="parent"> >+ <div class=" margin"> >+ <span class="common">F<span class="refcommon">﹆</span></span><span class="common">i<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">e<span class="refcommon">﹆</span></span><span class="common">r<span class="refcommon">﹆</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹆</span></span><span class="common">i<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">e<span class="refcommon">﹆</span></span><span class="common">r<span class="refcommon">﹆</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open triangle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">△</span></span><span class="common">i<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">e<span class="refcommon">△</span></span><span class="common">r<span class="refcommon">△</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">△</span></span><span class="common">i<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">e<span class="refcommon">△</span></span><span class="common">r<span class="refcommon">△</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..570098aaba326f38b3d2a4f78ec09fcd9ef8a9af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht >@@ -0,0 +1,149 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - open - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.1. Emphasis Mark Style: the âtext-emphasis-styleâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-style" /> >+ <link rel="match" href="reference/text-emphasis-style-open-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property applies emphasis marks to the element's text. " /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ #test1 >+ { >+ text-emphasis-style: open; >+ } >+ #test2 >+ { >+ text-emphasis-style: open circle; >+ } >+ #test3 >+ { >+ text-emphasis-style: open dot; >+ } >+ #test4 >+ { >+ text-emphasis-style: open double-circle; >+ } >+ #test5 >+ { >+ text-emphasis-style: open sesame; >+ } >+ #test6 >+ { >+ text-emphasis-style: open triangle; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ open >+ <div class="parent"> >+ <div><span id="test1">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open circle >+ <div class="parent"> >+ <div><span id="test2">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">○</span></span><span class="common">i<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">l<span class="refcommon">○</span></span><span class="common">e<span class="refcommon">○</span></span><span class="common">r<span class="refcommon">○</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open dot >+ <div class="parent"> >+ <div><span id="test3">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◦</span></span><span class="common">i<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">l<span class="refcommon">◦</span></span><span class="common">e<span class="refcommon">◦</span></span><span class="common">r<span class="refcommon">◦</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open double-circle >+ <div class="parent"> >+ <div><span id="test4">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◎</span></span><span class="common">i<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">l<span class="refcommon">◎</span></span><span class="common">e<span class="refcommon">◎</span></span><span class="common">r<span class="refcommon">◎</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open sesame >+ <div class="parent"> >+ <div><span id="test5">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹆</span></span><span class="common">i<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">l<span class="refcommon">﹆</span></span><span class="common">e<span class="refcommon">﹆</span></span><span class="common">r<span class="refcommon">﹆</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ open triangle >+ <div class="parent"> >+ <div><span id="test6">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">△</span></span><span class="common">i<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">l<span class="refcommon">△</span></span><span class="common">e<span class="refcommon">△</span></span><span class="common">r<span class="refcommon">△</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..c2a72f5a05a149c7bf1656d8c3d535c5d2175cfb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001-expected.xht >@@ -0,0 +1,130 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - shape - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin: 18px 0 0; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ dot >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ double-circle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ sesame >+ <div class="parent"> >+ <div class=" margin"> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ triangle >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..e28d6f9171c1e510fed403aa24947ef4be38efa8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht >@@ -0,0 +1,135 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - shape - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.1. Emphasis Mark Style: the âtext-emphasis-styleâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-style" /> >+ <link rel="match" href="reference/text-emphasis-style-shape-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property applies emphasis marks to the element's text. " /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ #test1 >+ { >+ text-emphasis-style: circle; >+ } >+ #test2 >+ { >+ text-emphasis-style: dot; >+ } >+ #test3 >+ { >+ text-emphasis-style: double-circle; >+ } >+ #test4 >+ { >+ text-emphasis-style: sesame; >+ } >+ #test5 >+ { >+ text-emphasis-style: triangle; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if each pair of upper and lower "Filler Text" in the square box is identical.</p> >+ circle >+ <div class="parent"> >+ <div><span id="test1">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">●</span></span><span class="common">i<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">l<span class="refcommon">●</span></span><span class="common">e<span class="refcommon">●</span></span><span class="common">r<span class="refcommon">●</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ dot >+ <div class="parent"> >+ <div><span id="test2">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">•</span></span><span class="common">i<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">l<span class="refcommon">•</span></span><span class="common">e<span class="refcommon">•</span></span><span class="common">r<span class="refcommon">•</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ double-circle >+ <div class="parent"> >+ <div><span id="test3">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">◉</span></span><span class="common">i<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">l<span class="refcommon">◉</span></span><span class="common">e<span class="refcommon">◉</span></span><span class="common">r<span class="refcommon">◉</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ sesame >+ <div class="parent"> >+ <div><span id="test4">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">﹅</span></span><span class="common">i<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">l<span class="refcommon">﹅</span></span><span class="common">e<span class="refcommon">﹅</span></span><span class="common">r<span class="refcommon">﹅</span></span> >+ Text >+ </div> >+ </div> >+ <br /> >+ triangle >+ <div class="parent"> >+ <div><span id="test5">Filler</span> Text</div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">▲</span></span><span class="common">i<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">l<span class="refcommon">▲</span></span><span class="common">e<span class="refcommon">▲</span></span><span class="common">r<span class="refcommon">▲</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001-expected.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001-expected.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..6bf79ba4527f99af740bdeca945449e8f9ed7a57 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001-expected.xht >@@ -0,0 +1,78 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - string - basic cases Reftest Reference</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .margin >+ { >+ margin: 18px 0 0; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower "Filler Text" in the square box is identical.</p> >+ string >+ <div class="parent"> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">!</span></span><span class="common">i<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">e<span class="refcommon">!</span></span><span class="common">r<span class="refcommon">!</span></span> >+ Text >+ </div> >+ <br /> >+ <div> >+ <span class="common">F<span class="refcommon">!</span></span><span class="common">i<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">e<span class="refcommon">!</span></span><span class="common">r<span class="refcommon">!</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..df76952a1fd0e284217d819392e538f5edd95211 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht >@@ -0,0 +1,79 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: text-emphasis-style - string - basic cases</title> >+ <link rel="author" title="Makoto Kikuchi" href="mailto:kikuchi@est.co.jp" /> >+ <link rel="help" title="CSS Text Level 3: 11.2.1. Emphasis Mark Style: the âtext-emphasis-styleâ property" href="http://www.w3.org/TR/css-text-3/#text-emphasis-style" /> >+ <link rel="match" href="reference/text-emphasis-style-string-001-ref.xht"/> >+ <meta name="flags" content="" /> >+ <meta name="assert" content="This property applies emphasis marks to the element's text. " /> >+ <style type="text/css"><![CDATA[ >+ .common >+ { >+ line-height: 1em; >+ position: relative; >+ } >+ .parent >+ { >+ border: solid 1px gray; >+ font-size: 2em; >+ width: 10em; >+ } >+ .refcommon >+ { >+ font-size: 0.5em; >+ left: 0em; >+ position: absolute; >+ top: -1.5em; >+ } >+ #test >+ { >+ text-emphasis-style: "!"; >+ } >+ ]]></style> >+ <script type="text/javascript"> >+ // <![CDATA[ >+ // Set Font Family to 'IPAMincho' >+ function setFontFamily () { >+ var fontName = 'IPAMincho'; >+ var divs = document.getElementsByTagName('div'); >+ var i = 0; >+ var div; >+ while (i < divs.length) { >+ div = divs.item(i); >+ if (div.className == 'parent') { >+ div.style.fontFamily = fontName; >+ } >+ i++; >+ } >+ } >+ // ]]> >+ </script> >+ </head> >+ <body> >+ <div> >+ <p>Test passes if a pair of upper and lower "Filler Text" in the square box is identical.</p> >+ string >+ <div class="parent"> >+ <div><span id="test">Filler</span> Text</div> >+ <br /> >+ <div class="margin"> >+ <span class="common">F<span class="refcommon">!</span></span><span class="common">i<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">l<span class="refcommon">!</span></span><span class="common">e<span class="refcommon">!</span></span><span class="common">r<span class="refcommon">!</span></span> >+ Text >+ </div> >+ </div> >+ <p class="fontChange" style="display: block;"> >+ If you are unable to see font glyphs for certain characters using the browsers default font, install the <a href="http://ossipedia.ipa.go.jp/ipafont/">IPA Font(http://ossipedia.ipa.go.jp/ipafont/)</a> and apply it. >+ <button type="button" onclick="setFontFamily()"> >+ Apply >+ </button> >+ </p> >+ <script type="text/javascript"> >+ if (document.getElementById) { >+ document.getElementById('fontChange').style.display = 'block' >+ } >+ </script> >+ </div> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..980285e457b930ef50ada1cd11b8699bf7a56c0c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/w3c-import.log >@@ -0,0 +1,100 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+text-decoration-line >+text-decoration-color >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/line-through-vertical.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color-recalc.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-color.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-010.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-012.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-013.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-014.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line-recalc.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-line.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-serialization.tentative.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-skip-ink.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-multiple.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-style-recalc.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-003.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-004.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-005.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-006.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-007.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-008.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-009.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-010.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-011.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-decoration-visibility-012.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-color-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-left-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-above-right-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-left-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-position-below-right-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-021.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-filled-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-none-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-open-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-shape-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001-expected.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-string-001.xht >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9ef69d0ed6212010d5d9a72b00bf3d092f76c6ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-001.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - property inheritance</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-left' property value is not inherited."> >+<style> >+ #parent { >+ nav-left: #finish; >+ } >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"><a href="">ignore</a> <a href="" id="intermediate">ignore</a> <a href="">START</a> <a href="" id="finish">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="" id="end">FINISH</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c493c2fb14a6a60ae7705ab71abd5a3c127e01ba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-002.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'inherit' property value</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'inherit' value is respected."> >+<style> >+ #parent { >+ nav-left: #finish; >+ } >+ #start { >+ nav-left: inherit; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"><a href="">ignore</a> <a href="" id="start">START</a> <a href="" id="finish">FINISH</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d908a244167c72a4c0085d300d4acd81f35d7dea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-003.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - input elements</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that directional focus navigation properties work on input elements."> >+<style> >+ #start { >+ nav-left: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the text input containing "START" below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" input.</p> >+ >+ <div><input value="ignore"> <input value="START" id="start"> <input value="ignore"></div> >+ >+ <div><input value="ignore"> <input value="ignore"> <input value="ignore"></div> >+ >+ <div><input value="ignore"> <input value="FINISH" id="finish"> <input value="ignore"></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..93a77c0bd1bbd325f04fd6683649116ac133a357 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-004.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - floating elements</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that directional focus navigation properties work on floating elements."> >+<style> >+ #container > div { >+ clear: left; >+ } >+ #container > div > a { >+ float: left; >+ margin-right: 1ex; >+ } >+ #start { >+ nav-left: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" input.</p> >+ >+ <div id="container"> >+ <div><a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="" id="finish">FINISH</a> <a href="">ignore</a></div> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e8b25c3e6ca14353ebefa824f912e0ef6ee296fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-005.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - currently focused element</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus doesn't change when navigating to the currently focused element."> >+<style> >+ #start { >+ nav-left: #start; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if the "START" element remains focused when navigating left.</p> >+ >+ <div><a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-1.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-1.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d526fc459a26a06c5d774315f56488b9883c57f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-1.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - unkown element id</title> >+<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that an unknow element id used as the value of the 'nav-right' property value does not hinder normal spacial navigation."> >+<style> >+#start { >+ nav-right: #foo; >+} >+</style> >+</head> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right moves the focus to the "FINISH" link.</p> >+ >+ <a href="" id="start">START</a> <a href="" id="finish">FINISH</a> >+</body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-2.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-2.html >new file mode 100644 >index 0000000000000000000000000000000000000000..be465ca7ce63f776757ec4884ba9e2ab6b94ec8a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-2.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - unkown element id</title> >+<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that an unknow element id used as the value of the 'nav-left' property value does not hinder normal spacial navigation."> >+<style> >+#start { >+ nav-left: #foo; >+} >+</style> >+</head> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left moves the focus to the "FINISH" link.</p> >+ >+ <a href="" id="finish">FINISH</a> <a href="" id="start">START</a> >+</body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-3.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-3.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4c6251b74ec36060a1b888fa5a6d8c3234a816e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-3.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - unkown element id</title> >+<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that an unknow element id used as the value of the 'nav-down' property value does not hinder normal spacial navigation."> >+<style> >+#start { >+ nav-down: #foo; >+} >+</style> >+</head> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down moves the focus to the "FINISH" link.</p> >+ >+ <a href="" id="start">START</a><br> >+ <a href="" id="finish">FINISH</a> >+</body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-4.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-4.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8ee919d329d8b332ca2c7e544d81cec6d2578071 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-4.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - unkown element id</title> >+<link rel="author" title="Florian Rivoal" href="mailto:florian@rivoal.net"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that an unknow element id used as the value of the 'nav-up' property value does not hinder normal spacial navigation."> >+<style> >+#start { >+ nav-up: #foo; >+} >+</style> >+</head> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up moves the focus to the "FINISH" link.</p> >+ >+ <a href="" id="finish">FINISH</a><br> >+ <a href="" id="start">START</a> >+</body></html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0af6da3553b45ab73e3551f212c259812d32b32d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-001.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'current' target frame</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'current' frame value is respected."> >+<style> >+ #start { >+ nav-down: #finish current; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <p><a href="" id="start">START</a></p> >+ >+ <iframe src="support/nav-dir-target-001-frame.html"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..db71fa5e8f57193ca54a52dbe13524452a219dba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-002.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'root' target frame</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'root' frame value is respected."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <iframe src="support/nav-dir-target-002-frame.html"></iframe> >+ >+ <p><a href="">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0f66998727fb2463eded062b89d01cba4b8eaea0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-003.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - named target frame</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named target frame value is respected."> >+<style> >+ #start { >+ nav-right: #finish "frame"; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="start">START</a> <a href="" id="finish">ignore</a></p> >+ >+ <iframe src="support/nav-dir-target-003-frame.html" name="frame"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..742f2358ad5917c3c4e111657b39c51b71809574 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-004.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non-existing target frame</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a non-existing target frame value is treated as 'current'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">ignore</a></p> >+ >+ <iframe src="support/nav-dir-target-004-frame.html"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..849ee51c1bb07f7ddbec2fe19d6e69bdcb1f00c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-005.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - sibling target frame</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named frame value also works for sibling frames."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-dir-target-005-frame.html"></iframe> >+ <iframe src="support/nav-dir-target-003-frame.html" name="sibling"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..55d897b6441078dc453f0e74847c1ef9daf1c7f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-006.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - missing target element</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus does not change to a different frame if the identifier is missing from the target frame."> >+<style> >+ #start { >+ nav-left: #finish current; >+ } >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="">ignore</a> <a href="" id="intermediate">ignore</a> <a href="" id="start">START</a></p> >+ >+ <iframe src="support/nav-dir-target-001-frame.html"></iframe> >+ >+ <p><a href="" id="end">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0d92d21b9e487f7a2339666889cee4da70215675 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-000.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - property inheritance for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-down' property value is not inherited for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-down: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="" id="finish">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ff869784b5f328b53ffb6589f56e32733a416870 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-001.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation (nav-down) - <id></title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that downward navigation input respects the 'nav-down' property."> >+<style> >+ #start { >+ nav-down: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <div><a href="" id="finish">FINISH</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fe6dda45074f0ce846486c06200eb876400eacb9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-002.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'auto' value for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'auto' value is implemented for 'nav-down'."> >+<style type="text/css"> >+ #start { >+ nav-down: #finish; >+ nav-down: auto; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="" id="finish">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e9e673a6e9a9ec3b49aa1c7a5061768bda9ebbca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-003.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - ID value for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the ID value is implemented for 'nav-down'."> >+<style type="text/css"> >+ #parent { >+ nav-down: #finish; >+ } >+ >+ #intermediate { >+ nav-down: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..81bb846996b0030a400028e105eeddafbd4e9c5e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-004.html >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - input elements for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-down' works for input elements."> >+<style type="text/css"> >+ #parent { >+ nav-down: #finish; >+ } >+ >+ #intermediate { >+ nav-down: #end; >+ } >+ >+ input { >+ display: block; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" text field.</p> >+ >+ <div id="parent"> >+ <input value="ignore"/> >+ <input value="START"/> >+ <input value="ignore" id="intermediate"/> >+ <input value="ignore"/> >+ </div> >+ >+ <div> >+ <input value="ignore"/> >+ <input value="FINISH" id="end"/> >+ <input value="ignore"/> >+ <input value="ignore"/> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0024ba381c4eae98d90257d7424dbf182c31c1ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-005.html >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in the writing direction for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-down' works for elements floating to the left."> >+<style type="text/css"> >+ div > a { >+ float: left; >+ margin-left: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: left; >+ } >+ >+ #parent { >+ nav-down: #finish; >+ } >+ >+ #intermediate { >+ nav-down: #end; >+ } >+ >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="">START</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="intermediate">ignore 2</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..09be3a94a65fac79b7264555ec1306bb5840b492 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-006.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in opposite to the writing direction for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-down' works for elements floating to the right."> >+<style type="text/css"> >+ div > a { >+ float: right; >+ margin-left: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: right; >+ } >+ >+ #parent { >+ nav-down: #finish; >+ } >+ >+ #intermediate { >+ nav-down: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="">ignore 2</a> >+ <a href="">START</a> >+ <a href="">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="end">FINISH</a> >+ <a href="" id="intermediate">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e56cf8d31420dfe942623c6d5cbed21d73383d6c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-007.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non existing ID for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-down' is ignored if the ID does not exist."> >+<style type="text/css"> >+ #parent { >+ nav-down: #error; >+ } >+ >+ #intermediate { >+ nav-down: #foobar; >+ } >+ >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">START</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="" id="end">FINISH</a> >+ <p><a href="">ignore</a> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a> >+ <p><a href="">ignore</a> >+ <p><a href="" id="error">ignore</a> >+ <p><a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..543e215d09676a1d701654907532f5a7f02b29df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-008.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - currently focused element for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus doesn't change when navigating to the currently focused element for 'nav-down'."> >+<style> >+ #start { >+ nav-down: #start; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if the "START" element remains focused when navigating down.</p> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..305b76a22017a9e95c83248140f44a07296d7c3a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-009.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'current' target frame for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'current' frame value is respected for 'nav-down'."> >+<style> >+ #start { >+ nav-down: #finish current; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <p><a href="" id="finish">FINISH</a></p> >+ <iframe src="support/nav-down-009-frame.html"></iframe> >+ <p><a href="" id="start">START</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c3447dc2d860205cc83ba12e46c1ae829e173018 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-010.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'root' target frame for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'root' frame value is respected for 'nav-down'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <iframe src="support/nav-down-010-frame.html"></iframe> >+ >+ <p><a href="">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..831be68b0a28e4284812f6aa3a9f1cbb109efe76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-011.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - named target frame for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="contributor" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named target frame value is respected for 'nav-down'."> >+<style> >+ #start { >+ nav-down: #finish "frame"; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <p> >+ <a href="" id="start">START</a> >+ </p> >+ <p> >+ <a href="" id="finish">ignore</a> >+ </p> >+ >+ <iframe src="support/nav-down-011-frame.html" name="frame"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1988dffbb86a90f0175cab87472727bfb757777d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-012.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non-existing target frame for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a non-existing target frame value is treated as 'current' for 'nav-down'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-down-012-frame.html"></iframe> >+ >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-013.html >new file mode 100644 >index 0000000000000000000000000000000000000000..afd4149cf8907ad913fdb642fab9dd147e8d790a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-013.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - sibling target frame for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named frame value also works for sibling frames for 'nav-down'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-down-013-frame.html"></iframe> >+ <iframe src="support/nav-down-011-frame.html" name="sibling"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b1abbbee6fc9139e37c39d7a40e52a6d83a7b1f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-014.html >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - missing target element for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus does not change to a different frame if the identifier is missing from the target frame for 'nav-down'."> >+<style> >+ #start { >+ nav-down: #finish current; >+ } >+ #intermediate { >+ nav-down: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="start">START</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ >+ <iframe src="support/nav-down-009-frame.html"></iframe> >+ >+ <p><a href="" id="end">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..37c9f6ff8c30639b731cb25968f3607994a46ca8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-015.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'inherit' value for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'inherit' value is implemented for 'nav-down'."> >+<style type="text/css"> >+ #parent { >+ nav-down: #end; >+ } >+ >+ #intermediateParent, #intermediate { >+ nav-down: inherit; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p id="intermediateParent"><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a587fbf019a41b03d0731dfeaa9c6739fd021b69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-016.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - disabled elements are not navigated for 'nav-down'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that disabled elements are not navigated for 'nav-down'."> >+<style type="text/css"> >+ #start { >+ nav-down: #intermediate; >+ } >+ input { >+ display: block; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating down moves the focus to the "FINISH" text field and not the disabled "ignore" one.</p> >+ >+ <div id="parent"> >+ <input value="START"/> >+ <input value="ignore" disabled="disabled" id="intermediate"/> >+ <input value="FINISH"/> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..963727ea2d309a24965d67b39b3bcedcf370e642 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-000.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - property inheritance for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-left' property value is not inherited for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-left: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">START</a> >+ <a href="" id="finish">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bf7060eac01890fc276839a12435daa19a817840 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-001.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation (nav-left) - <id></title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that leftward navigation input respects the 'nav-left' property."> >+<style> >+ #start { >+ nav-left: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div><a href="">ignore</a> <a href="" id="finish">FINISH</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..04dcf38a70c21f826cf15c4d6332bff7d1e1c1c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-002.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'auto' value for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'auto' value is implemented for 'nav-left'."> >+<style type="text/css"> >+ #start { >+ nav-left: #finish; >+ nav-left: auto; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="" id="start">START</a> >+ <a href="" id="finish">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6ff12e41a67195af8e05169d8312e72cc1130551 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-003.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - ID value for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the ID value is implemented for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-left: #finish; >+ } >+ >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">START</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f2c214384440164cc50cf7dfc00fb2ac83fbde76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-004.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - input elements for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-left' works for input elements."> >+<style type="text/css"> >+ #parent { >+ nav-left: #finish; >+ } >+ >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" text field.</p> >+ >+ <div id="parent"> >+ <input value="ignore"/> >+ <input value="ignore" id="intermediate"/> >+ <input value="START"/> >+ <input value="ignore"/> >+ </div> >+ >+ <div> >+ <input value="ignore"/> >+ <input value="FINISH" id="end"/> >+ <input value="ignore"/> >+ <input value="ignore"/> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9ed626732508ed15f9ff699a3f99460af6499b2d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-005.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in the writing direction for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-left' works for elements floating to the left."> >+<style type="text/css"> >+ div > a { >+ float: left; >+ margin-left: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: left; >+ } >+ >+ #parent { >+ nav-left: #finish; >+ } >+ >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="" id="intermediate">ignore 2</a> >+ <a href="">START</a> >+ <a href="">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eb2e2932c597e640229a320bf5890f90eefad108 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-006.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in opposite to the writing direction for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-left' works for elements floating to the right."> >+<style type="text/css"> >+ div > a { >+ float: right; >+ margin-left: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: right; >+ } >+ >+ #parent { >+ nav-left: #finish; >+ } >+ >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="">ignore 2</a> >+ <a href="">START</a> >+ <a href="" id="intermediate">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fbf18d65ea585f88c35b823e0f54674aa2cfc9bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-007.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non existing ID for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-left' is ignored if the ID does not exist."> >+<style type="text/css"> >+ #parent { >+ nav-left: #error; >+ } >+ >+ #intermediate { >+ nav-left: #foobar; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="" id="end">FINISH</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">START</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ <a href="" id="error">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..97fcd52e35f28c70f05a5a4aedb6314f97625dd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-008.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - currently focused element for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus doesn't change when navigating to the currently focused element for 'nav-left'."> >+<style> >+ #start { >+ nav-left: #start; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if the "START" element remains focused when navigating left.</p> >+ >+ <div><a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d3eb7e05c431d837c3a5f20fb9e676f39b784660 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-009.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'current' target frame for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'current' frame value is respected for 'nav-left'."> >+<style> >+ #start { >+ nav-left: #finish current; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <a href="" id="finish">FINISH</a> >+ <iframe src="support/nav-left-009-frame.html"></iframe> >+ <a href="" id="start">START</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3a091576b7f95dad74456fdd4fad426bbf5615f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-010.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'root' target frame for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'root' frame value is respected for 'nav-left'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <iframe src="support/nav-left-010-frame.html"></iframe> >+ >+ <p><a href="">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5acaf9125bc8ac2d8edc66f946eec22e1cfcfb43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-011.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - named target frame for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="contributor" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named target frame value is respected for 'nav-left'."> >+<style> >+ #start { >+ nav-left: #finish "frame"; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <p> >+ <a href="" id="finish">ignore</a> >+ <a href="" id="start">START</a> >+ </p> >+ >+ <iframe src="support/nav-left-011-frame.html" name="frame"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4ed7403167710252f44cd97f779816a3699b0f6e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-012.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non-existing target frame for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a non-existing target frame value is treated as 'current' for 'nav-left'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <a href="" id="finish">ignore</a> >+ <iframe src="support/nav-left-012-frame.html"></iframe> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-013.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7f34356de7f95f8ba76e1abfcef9f74245ee049f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-013.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - sibling target frame for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named frame value also works for sibling frames for 'nav-left'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-left-013-frame.html"></iframe> >+ <iframe src="support/nav-left-011-frame.html" name="sibling"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a71e5b1f46d46bf9bce8edc5f1a1bcb9904290ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-014.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - missing target element for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus does not change to a different frame if the identifier is missing from the target frame for 'nav-left'."> >+<style> >+ #start { >+ nav-left: #finish current; >+ } >+ #intermediate { >+ nav-left: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="">ignore</a> <a href="" id="intermediate">ignore</a> <a href="" id="start">START</a></p> >+ >+ <iframe src="support/nav-left-009-frame.html"></iframe> >+ >+ <p><a href="" id="end">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9b563d947415296e96bb41fe17f5f517f1543be9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-015.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'inherit' value for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'inherit' value is implemented for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-left: #end; >+ } >+ >+ #intermediate { >+ nav-left: inherit; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">START</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7730eb7933a503c2d9b20e6ec9da2f67d3103f2f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-016.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - disabled elements are not navigated for 'nav-left'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that disabled elements are not navigated for 'nav-left'."> >+<style type="text/css"> >+ #start { >+ nav-left: #intermediate; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating left moves the focus to the "FINISH" text field and not the disabled "ignore" one.</p> >+ >+ <div id="parent"> >+ <input value="FINISH"/> >+ <input value="ignore" disabled="disabled" id="intermediate"/> >+ <input value="START"/> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..074eceb72418a72bb0caa4641e1833a15f552f1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-000.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - property inheritance for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-right' property value is not inherited for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-right: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="">START</a> >+ <a href="" id="end">FINISH</a> >+ <a href="" id="finish">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..64651da26c549ab3c19f5e6b8717f44144af0c87 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-001.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation (nav-right) - <id></title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that rightward navigation input respects the 'nav-right' property."> >+<style> >+ #start { >+ nav-right: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="" id="finish">FINISH</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a4796ec9e879a6a62f58949afd306e5c2948a12e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-002.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'auto' value for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'auto' value is implemented for 'nav-right'."> >+<style type="text/css"> >+ #start { >+ nav-right: #finish; >+ nav-right: auto; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="" id="start">START</a> >+ <a href="" id="end">FINISH</a> >+ <a href="" id="finish">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c426aa57977a16b2c5204f5ed0bd4ab24358449a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-003.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - ID value for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the ID value is implemented for 'nav-right'."> >+<style type="text/css"> >+ #parent { >+ nav-right: #finish; >+ } >+ >+ #intermediate { >+ nav-right: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="">START</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..69af8d6e42cc87c4fd4e43ba41eb719d2db0df18 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-004.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - input elements for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-right' works for input elements."> >+<style type="text/css"> >+ #parent { >+ nav-right: #finish; >+ } >+ >+ #intermediate { >+ nav-right: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" text field.</p> >+ >+ <div id="parent"> >+ <input value="ignore"/> >+ <input value="START"/> >+ <input value="ignore" id="intermediate"/> >+ <input value="ignore"/> >+ </div> >+ >+ <div> >+ <input value="ignore"/> >+ <input value="FINISH" id="end"/> >+ <input value="ignore"/> >+ <input value="ignore"/> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..55a58bb6fdc99a77ef7c6dbbd6edf3917cb81bf1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-005.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in the writing direction for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-right' works for elements floating to the left."> >+<style type="text/css"> >+ div > a { >+ float: left; >+ margin-right: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: left; >+ } >+ >+ #parent { >+ nav-right: #finish; >+ } >+ >+ #intermediate { >+ nav-right: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="">START</a> >+ <a href="" id="intermediate">ignore 2</a> >+ <a href="">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c8e1c454565eaa97ba1c0167554a5f82850be9ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-006.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in opposite to the writing direction for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-right' works for elements floating to the right."> >+<style type="text/css"> >+ div > a { >+ float: right; >+ margin-right: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: right; >+ } >+ >+ #parent { >+ nav-right: #finish; >+ } >+ >+ #intermediate { >+ nav-right: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="" id="intermediate">ignore 2</a> >+ <a href="">START</a> >+ <a href="">ignore 3</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2bf12ac38cecd3efe570a3169e6983a9bdd388f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-007.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non existing ID for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-right' is ignored if the ID does not exist."> >+<style type="text/css"> >+ #parent { >+ nav-right: #error; >+ } >+ >+ #intermediate { >+ nav-right: #foobar; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">START</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ <a href="" id="error">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..494025a7f99eabdad878573c4bad12e8506705f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-008.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - currently focused element for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus doesn't change when navigating to the currently focused element for 'nav-right'."> >+<style> >+ #start { >+ nav-right: #start; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if the "START" element remains focused when navigating right.</p> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="" id="start">START</a> >+ <a href="">ignore</a> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..94878eca7f7f5db093877bd0323e30ab47cbfa6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-009.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'current' target frame for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'current' frame value is respected for 'nav-right'."> >+<style> >+ #start { >+ nav-right: #finish current; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <a href="" id="start">START</a> >+ <iframe src="support/nav-right-009-frame.html"></iframe> >+ <a href="" id="finish">FINISH</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..04e276116ff44cebfd76d31e6ba7fe0e71b93980 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-010.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'root' target frame for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'root' frame value is respected for 'nav-right'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <iframe src="support/nav-right-010-frame.html"></iframe> >+ >+ <p><a href="">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..491cbfe24066cd5a99b8b1950ec7ef5e47d12968 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-011.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - named target frame for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="contributor" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named target frame value is respected for 'nav-right'."> >+<style> >+ #start { >+ nav-right: #finish "frame"; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <p> >+ <a href="" id="start">START</a> >+ <a href="" id="finish">ignore</a> >+ </p> >+ >+ <iframe src="support/nav-right-011-frame.html" name="frame"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c6e320542cf44fd30eff25701e15e12dffe84554 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-012.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non-existing target frame for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a non-existing target frame value is treated as 'current' for 'nav-right'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <iframe src="support/nav-right-012-frame.html"></iframe> >+ <a href="" id="finish">ignore</a> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-013.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f10e48f036e4f3b8c7a6afdbce77a36d84f0c4c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-013.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - sibling target frame for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named frame value also works for sibling frames for 'nav-right'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-right-011-frame.html" name="sibling"></iframe> >+ <iframe src="support/nav-right-013-frame.html"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..09045f0b75e08e143f421893154a7e385e677e66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-014.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - missing target element for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus does not change to a different frame if the identifier is missing from the target frame for 'nav-right'."> >+<style> >+ #start { >+ nav-right: #finish current; >+ } >+ #intermediate { >+ nav-right: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <p> >+ <a href="" id="start">START</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">ignore</a> >+ </p> >+ >+ <iframe src="support/nav-right-009-frame.html"></iframe> >+ >+ <p><a href="" id="end">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7e1bb0e313eb8566dd02fe9f573428b364f16392 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-015.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'inherit' value for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'inherit' value is implemented for 'nav-right'."> >+<style type="text/css"> >+ #parent { >+ nav-right: #end; >+ } >+ >+ #intermediate { >+ nav-right: inherit; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore</a> >+ <a href="">START</a> >+ <a href="" id="intermediate">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+ <div> >+ <a href="">ignore</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore</a> >+ <a href="">ignore</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2942afeac90ed174bb8c5f124a193a2655be41f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-016.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - disabled elements are not navigated for 'nav-right'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that disabled elements are not navigated for 'nav-right'."> >+<style type="text/css"> >+ #start { >+ nav-right: #intermediate; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating right moves the focus to the "FINISH" text field and not the disabled "ignore" one.</p> >+ >+ <div id="parent"> >+ <input value="START"/> >+ <input value="ignore" disabled="disabled" id="intermediate"/> >+ <input value="FINISH"/> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-000.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-000.html >new file mode 100644 >index 0000000000000000000000000000000000000000..aebd427187e1e205174388e601d827dd3b28b21c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-000.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - property inheritance for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-up' property value is not inherited for 'nav-left'."> >+<style type="text/css"> >+ #parent { >+ nav-up: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="" id="finish">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2afcb9869ae9c7b9d40d7938a236e0d7f5ee2ba1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-001.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation (nav-up) - <id></title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that upward navigation input respects the 'nav-up' property."> >+<style> >+ #start { >+ nav-up: #finish; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="" id="start">START</a> <a href="">ignore</a> <a href="">ignore</a></div> >+ >+ <div><a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="">ignore</a> <a href="" id="finish">FINISH</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..16cc6371f2643ce92130a560002d86a3325f838b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-002.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'auto' value for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'auto' value is implemented for 'nav-up'."> >+<style type="text/css"> >+ #start { >+ nav-up: #finish; >+ nav-up: auto; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="" id="finish">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c64a39ed2d1b28ffd98088d6834c1a72705ff452 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-003.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - ID value for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the ID value is implemented for 'nav-up'."> >+<style type="text/css"> >+ #parent { >+ nav-up: #finish; >+ } >+ >+ #intermediate { >+ nav-up: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..907c0dffd9dd80668f995a4aa272f642b5993908 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-004.html >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - input elements for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-up' works for input elements."> >+<style type="text/css"> >+ #parent { >+ nav-up: #finish; >+ } >+ >+ #intermediate { >+ nav-up: #end; >+ } >+ >+ input { >+ display: block; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" text field.</p> >+ >+ <div id="parent"> >+ <input value="ignore"/> >+ <input value="ignore" id="intermediate"/> >+ <input value="START"/> >+ <input value="ignore"/> >+ </div> >+ >+ <div> >+ <input value="ignore"/> >+ <input value="FINISH" id="end"/> >+ <input value="ignore"/> >+ <input value="ignore"/> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..74d4e2bcf11ce457b49aad8909be4661041c94b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-005.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in the writing direction for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-up' works for elements floating to the left."> >+<style type="text/css"> >+ div > a { >+ float: up; >+ margin-up: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: up; >+ } >+ >+ #parent { >+ nav-up: #finish; >+ } >+ >+ #intermediate { >+ nav-up: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore 1</a></p> >+ <p><a href="" id="intermediate">ignore 2</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="">ignore 3</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore 4</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">ignore 5</a></p> >+ <p><a href="">ignore 6</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1183494e5f20874ce14c2994abbda5eaca42d631 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-006.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - elements floating in opposite to the writing direction for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that 'nav-up' works for elements floating to the right."> >+<style type="text/css"> >+ div > a { >+ float: right; >+ margin-up: 1em; >+ margin-right: 1em; >+ } >+ >+ div { >+ clear: right; >+ } >+ >+ #parent { >+ nav-up: #finish; >+ } >+ >+ #intermediate { >+ nav-up: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <a href="">ignore 1</a> >+ <a href="" id="intermediate">ignore 3</a> >+ <a href="" id="end">FINISH</a> >+ <a href="">ignore 2</a> >+ </div> >+ >+ <div> >+ <a href="">ignore 4</a> >+ <a href="">START</a> >+ <a href="">ignore 5</a> >+ <a href="">ignore 6</a> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0669499f70ed95df0e9ca086b319e73be2b97bfa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-007.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non existing ID for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'nav-up' is ignored if the ID does not exist."> >+<style type="text/css"> >+ #parent { >+ nav-up: #error; >+ } >+ >+ #intermediate { >+ nav-up: #foobar; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="error">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..485baeafefb574ff6901fdbbc239e5dbb09a639c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-008.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - currently focused element for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus doesn't change when navigating to the currently focused element for 'nav-up'."> >+<style> >+ #start { >+ nav-up: #start; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if the "START" element remains focused when navigating up.</p> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="">ignore</a></div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..36374fcd0f5c99a6d0fcac6078afe5ea0c4345f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-009.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'current' target frame for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'current' frame value is respected for 'nav-up'."> >+<style> >+ #start { >+ nav-up: #finish current; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <div> >+ <p><a href="" id="finish">FINISH</a></p> >+ <iframe src="support/nav-up-009-frame.html"></iframe> >+ <p><a href="" id="start">START</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cf23a8ddcd6adebcbf0c68991ae3ed9636e3cccc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-010.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'root' target frame for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'root' frame value is respected for 'nav-up'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">FINISH</a></p> >+ >+ <iframe src="support/nav-up-010-frame.html"></iframe> >+ >+ <p><a href="">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fd859a51b3a20e70092757047f28adf817a5b4aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-011.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - named target frame for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="contributor" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named target frame value is respected for 'nav-up'."> >+<style> >+ #start { >+ nav-up: #finish "frame"; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+ >+ <iframe src="support/nav-up-011-frame.html" name="frame"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..714bc3ff18fddffe80606a146abac791f7519faf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-012.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - non-existing target frame for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a non-existing target frame value is treated as 'current' for 'nav-up'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="" id="finish">ignore</a></p> >+ >+ <iframe src="support/nav-up-012-frame.html"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-013.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-013.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ef2e5c37de49d3ab4eca66107a89ac33a448ab1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-013.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - sibling target frame for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that a named frame value also works for sibling frames for 'nav-up'."> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up once moves the focus to the "FINISH" link.</p> >+ >+ <iframe src="support/nav-up-013-frame.html"></iframe> >+ <iframe src="support/nav-up-011-frame.html" name="sibling"></iframe> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..375de17fc879294a0ee81cc2460cc034324f7c16 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-014.html >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - missing target element for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that focus does not change to a different frame if the identifier is missing from the target frame for 'nav-up'."> >+<style> >+ #start { >+ nav-up: #finish current; >+ } >+ #intermediate { >+ nav-up: #end; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="intermediate">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+ >+ <iframe src="support/nav-up-009-frame.html"></iframe> >+ >+ <p><a href="" id="end">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a2bc910bca07e98f083359ecd4b6a597158711e3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-015.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - 'inherit' value for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that the 'inherit' value is implemented for 'nav-up'."> >+<style type="text/css"> >+ #parent { >+ nav-up: #end; >+ } >+ >+ #intermediateParent, #intermediate { >+ nav-up: inherit; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" link below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up twice moves the focus to the "FINISH" link.</p> >+ >+ <div id="parent"> >+ <p><a href="">ignore</a></p> >+ <p id="intermediateParent"><a href="" id="intermediate">ignore</a></p> >+ <p><a href="">START</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+ <div> >+ <p><a href="">ignore</a></p> >+ <p><a href="" id="end">FINISH</a></p> >+ <p><a href="">ignore</a></p> >+ <p><a href="">ignore</a></p> >+ </div> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82e342db2e7aa55611c5fe74a8c3998af4716259 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-016.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - disabled elements are not navigated for 'nav-up'</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-4/#nav-dir"> >+<meta name="flags" content="interact"> >+<meta name="assert" content="Test checks that disabled elements are not navigated for 'nav-up'."> >+<style type="text/css"> >+ #start { >+ nav-up: #intermediate; >+ } >+ >+ input { >+ display: block; >+ } >+</style> >+<body> >+ <p>First, use directional navigation to navigate the focus to the "START" text field below.</p> >+ <!-- In Opera 12.16, directional navigation may be done using Shift+<arrow key>. >+ In the SmartTV emulator, use the keypad in the GUI. --> >+ <p>Test passes if navigating up moves the focus to the "FINISH" text field and not the disabled "ignore" one.</p> >+ >+ <div id="parent"> >+ <input value="FINISH"/> >+ <input value="ignore" disabled="disabled" id="intermediate"/> >+ <input value="START"/> >+ </div> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-017.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-017.html >index 54155e4b8aad8f4c7d63bda4a02616a526233987..d3a350d2a8fe8cc7b2d2a0a48529ce34a55758ba 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-017.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-017.html >@@ -9,18 +9,18 @@ > <style> > @keyframes outline-anim { > from { >- outline: solid 1px rgb(1,0,0); >+ outline: solid 1px rgba(1, 0, 0, 0.5); > outline-offset: 1px; > } > to { >- outline: solid 3px rgb(3,0,0); >+ outline: solid 3px rgba(3, 0, 0, 0.5); > outline-offset: 3px; > } > } > > #test { > animation: outline-anim 3s -1.5s paused linear; >- outline: solid 1px rgb(1,0,0); >+ outline: solid 1px rgba(1, 0, 0, 0.5); > outline-offset: 1px; > } > </style> >@@ -29,20 +29,27 @@ > <div id=log></div> > > <script> >- test( >- function(){ >- var test = document.getElementById("test"); >- assert_equals(getComputedStyle(test).outlineColor, 'rgb(2, 0, 0)'); >- }, "outline-color is animated as a color"); >- test( >- function(){ >- var test = document.getElementById("test"); >- assert_equals(getComputedStyle(test).outlineWidth, '2px'); >- }, "outline-width is animated as a length"); >- test( >- function(){ >- var test = document.getElementById("test"); >- assert_equals(getComputedStyle(test).outlineOffset, '2px'); >- }, "outline-offset is animated as a length"); >+ // outline being a render-only property, its animation can be done off the main thread >+ // checking the values after the first paint is safer, hence requestAnimationFrame >+ setup({explicit_done:true}); >+ requestAnimationFrame(function() { >+ // synchronous tests being run during the page's first paint >+ test( >+ function(){ >+ var test = document.getElementById("test"); >+ assert_equals(getComputedStyle(test).outlineColor, 'rgba(2, 0, 0, 0.5)'); >+ }, "outline-color is animated as a color"); >+ test( >+ function(){ >+ var test = document.getElementById("test"); >+ assert_equals(getComputedStyle(test).outlineWidth, '2px'); >+ }, "outline-width is animated as a length"); >+ test( >+ function(){ >+ var test = document.getElementById("test"); >+ assert_equals(getComputedStyle(test).outlineOffset, '2px'); >+ }, "outline-offset is animated as a length"); >+ done(); >+ }); > </script> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-018.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-018.html >index 448a11f141eabb3b05fc1c68b7dfac18d659ee42..ff79144da2aa50e09504f8f37bb5d230def1fca8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-018.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-018.html >@@ -16,28 +16,46 @@ > } > } > >-#test { >- animation: outline-anim 3s -1.5s paused linear; >+#test1 { >+ animation: outline-anim 3s 0s paused linear; >+ outline: solid 1px black; >+} >+#test2 { >+ animation: outline-anim 3s -1s paused linear; >+ outline: solid 1px black; >+} >+#test3 { >+ animation: outline-anim 3s -2s paused linear; >+ outline: solid 1px black; >+} >+#test4 { >+ animation: outline-anim 3s 0s paused reverse-linear; > outline: solid 1px black; > } > </style> > <body> >- <div id="test"></div> >+ <div id="test1"></div> >+ <div id="test2"></div> >+ <div id="test3"></div> >+ <div id="test4"></div> > <div id=log></div> > > <script> >- test( >- function(){ >- var test = document.getElementById("test"); >- >- test.style.animation = "outline-anim 3s 0s paused linear" >- assert_equals(getComputedStyle(test).outlineStyle, 'solid'); >- test.style.animation = "outline-anim 3s -1s paused linear" >- assert_equals(getComputedStyle(test).outlineStyle, 'solid'); >- test.style.animation = "outline-anim 3s -2s paused linear" >- assert_equals(getComputedStyle(test).outlineStyle, 'dotted'); >- test.style.animation = "outline-anim 3s 0s paused reverse-linear" >- assert_equals(getComputedStyle(test).outlineStyle, 'dotted'); >- }, "outline-style is animated as a discrete type"); >+ // outline being a render-only property, its animation can be done off the main thread >+ // checking the values after the first paint is safer, hence requestAnimationFrame >+ setup({explicit_done:true}); >+ requestAnimationFrame(function() { >+ // synchronous tests being run during the page's first paint >+ test( >+ function(){ >+ var tests = document.querySelectorAll("div[id^='test']"); >+ assert_equals(getComputedStyle(tests[0]).outlineStyle, 'solid'); >+ assert_equals(getComputedStyle(tests[1]).outlineStyle, 'solid'); >+ assert_equals(getComputedStyle(tests[2]).outlineStyle, 'dotted'); >+ assert_equals(getComputedStyle(tests[3]).outlineStyle, 'dotted'); >+ }, "outline-style is animated as a discrete type" >+ ); >+ done(); >+ }); > </script> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..194b6336918939bf5978395b73fdab529705435e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020-expected.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<html lang=en> >+ <meta charset=utf-8> >+ <title>CSS-UI test: outline block with outline inline reference file</title> >+ <link rel="author" title="Aleks Totic <atotic@chromium.org>"> >+ <meta name=assert content="inline child displays outline correctly"> >+<style> >+#container { >+ border: 5px solid green; >+ width: 110px; >+ height: 40px; >+ position: relative; >+ top: -5px; >+ left: -5px; >+} >+ >+#target { >+ border: 5px solid blue; >+ position: relative; >+ top: 5px; >+} >+</style> >+ >+ <p>Test passes if blue outline touches top left of green outline.</p> >+ <div id="container"><span id="target">x</span></div> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020.html >new file mode 100644 >index 0000000000000000000000000000000000000000..457f10ad65772a6c7737f55222e5bc70b34461ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020.html >@@ -0,0 +1,23 @@ >+<!doctype html> >+<html lang=en> >+ <meta charset=utf-8> >+ <title>CSS-UI test: outline block with outline inline</title> >+ <link rel="author" title="Aleks Totic <atotic@chromium.org>" href="atotic@"> >+ <meta name=assert content=""> >+ <link rel=help href="https://drafts.csswg.org/css-ui-3/#outline-props"> >+ <link rel="match" href="./reference/outline-020-ref.html"> >+<style> >+#container { >+ outline: green solid 5px; >+ width: 100px; >+ height: 30px; >+ padding: 5px; >+} >+#target { >+ outline: blue solid 5px; >+} >+</style> >+ >+ <p>Test passes if blue outline touches top left of green outline.</p> >+ <div id="container"><span id="target">x</span></div> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..90bb5a1c8fb14116c6364c36a9805ceb448e7d33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-invalid.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing box-sizing with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#box-sizing"> >+<meta name="assert" content="box-sizing supports only the grammar 'content-box | border-box'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("box-sizing", "auto"); >+test_invalid_value("box-sizing", "content-box border-box"); >+test_invalid_value("box-sizing", "fill-box"); >+test_invalid_value("box-sizing", "margin-box"); >+test_invalid_value("box-sizing", "padding-box"); >+test_invalid_value("box-sizing", "view-box"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3d23d473d83b590560d7092560f817221c8b0781 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-valid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing box-sizing with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#box-sizing"> >+<meta name="assert" content="box-sizing supports the full grammar 'content-box | border-box'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("box-sizing", "content-box"); >+test_valid_value("box-sizing", "border-box"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9751b9b9d2219435cb8bd3f5591a814e4282e904 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-invalid.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing caret-color with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#caret-color"> >+<meta name="assert" content="caret-color supports only the grammar 'auto | <color>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("caret-color", "none"); >+test_invalid_value("caret-color", "invert"); >+test_invalid_value("caret-color", "50%"); >+test_invalid_value("caret-color", "red green"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..81cfe25782a4b66a23ae95fa56d6f41468886e66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-valid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing caret-color with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#caret-color"> >+<meta name="assert" content="caret-color supports the full grammar 'auto | <color>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("caret-color", "auto"); >+test_valid_value("caret-color", "rgba(10, 20, 30, 0.4)"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bd055307135abde1f53d904b08dd5b44217dcae9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-invalid.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing cursor with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#cursor"> >+<meta name="assert" content="cursor supports only the grammar."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("cursor", "en-resize"); >+test_invalid_value("cursor", 'url("https://example.com/") alias'); >+test_invalid_value("cursor", '1 2 url("https://example.com/"), copy'); >+test_invalid_value("cursor", 'url("https://example.com/"), url("https://example.com/") 3, move'); >+ >+test_invalid_value("cursor", 'url("https://example.com/") 1px 2px, copy'); >+test_invalid_value("cursor", 'url("https://example.com/"), url("https://example.com/") 3% 4%, move'); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..20ea26754c600db6c11c9f58f547db4741bb4109 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-valid.html >@@ -0,0 +1,58 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing cursor with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#cursor"> >+<meta name="assert" content="cursor supports the full grammar."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("cursor", "auto"); >+test_valid_value("cursor", "default"); >+test_valid_value("cursor", "none"); >+test_valid_value("cursor", "context-menu"); >+test_valid_value("cursor", "help"); >+test_valid_value("cursor", "pointer"); >+test_valid_value("cursor", "progress"); >+test_valid_value("cursor", "wait"); >+test_valid_value("cursor", "cell"); >+test_valid_value("cursor", "crosshair"); >+test_valid_value("cursor", "text"); >+test_valid_value("cursor", "vertical-text"); >+test_valid_value("cursor", "alias"); >+test_valid_value("cursor", "copy"); >+test_valid_value("cursor", "move"); >+test_valid_value("cursor", "no-drop"); >+test_valid_value("cursor", "not-allowed"); >+test_valid_value("cursor", "grab"); >+test_valid_value("cursor", "grabbing"); >+test_valid_value("cursor", "e-resize"); >+test_valid_value("cursor", "n-resize"); >+test_valid_value("cursor", "ne-resize"); >+test_valid_value("cursor", "nw-resize"); >+test_valid_value("cursor", "s-resize"); >+test_valid_value("cursor", "se-resize"); >+test_valid_value("cursor", "sw-resize"); >+test_valid_value("cursor", "w-resize"); >+test_valid_value("cursor", "ew-resize"); >+test_valid_value("cursor", "ns-resize"); >+test_valid_value("cursor", "nesw-resize"); >+test_valid_value("cursor", "nwse-resize"); >+test_valid_value("cursor", "col-resize"); >+test_valid_value("cursor", "row-resize"); >+test_valid_value("cursor", "all-scroll"); >+test_valid_value("cursor", "zoom-in"); >+test_valid_value("cursor", "zoom-out"); >+ >+test_valid_value("cursor", 'url("https://example.com/"), alias', ['url("https://example.com/"), alias', 'url(https://example.com/), alias']); >+test_valid_value("cursor", 'url("https://example.com/") 1 calc(2 + 0), copy', ['url("https://example.com/") 1 calc(2), copy', 'url("https://example.com/") 1 2, copy', 'url(https://example.com/) 1 2, copy']); >+test_valid_value("cursor", 'url("https://example.com/"), url("https://example.com/") 3 -4, move', ['url("https://example.com/"), url("https://example.com/") 3 -4, move', 'url(https://example.com/), url(https://example.com/) 3 -4, move']); >+test_valid_value("cursor", 'url("https://example.com/") 5 6, grab', ['url("https://example.com/") 5 6, grab', 'url(https://example.com/) 5 6, grab']); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..029c1e98dbf0d9fefc5fd5ed517f1bb745d374cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline-color with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-color"> >+<meta name="assert" content="outline-color supports only the grammar '<color> | invert'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("outline-color", "auto"); >+test_invalid_value("outline-color", "none"); >+test_invalid_value("outline-color", "50%"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-mandatory.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-mandatory.html >new file mode 100644 >index 0000000000000000000000000000000000000000..891bbc00a44bd4811ec27c1bec45524f13d91c1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-mandatory.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline-color with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-color"> >+<meta name="assert" content="outline-color supports '<color>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("outline-color", "rgba(10, 20, 30, 0.4)"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-optional.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-optional.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bd3b9e6be67a73f4b5c24e73b04588fefc09afe0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-optional.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline-color with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-color"> >+<meta name="assert" content="outline-color supports 'invert'."> >+<meta name="flags" content="may"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+// Conformant UAs may ignore the invert value on platforms that do not support color inversion of the pixels on the screen. >+test_valid_value("outline-color", "invert"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ea8d88b57d9461a131fd2ab23684f3fddcebbd01 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline"> >+<meta name="assert" content="outline supports only the grammar '<outline-color> || <outline> || <outline>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("outline", "invert solid rgba(10, 20, 30, 0.4)"); >+test_invalid_value("outline", "double invert groove"); >+test_invalid_value("outline", "thin outset thick"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f5471600cc36e39c38c4759454382034ecdb58b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline-offset with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-offset"> >+<meta name="assert" content="outline-offset supports only the grammar '<length>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("outline-offset", "auto"); >+test_invalid_value("outline-offset", "1%"); >+test_invalid_value("outline-offset", "2px 3px"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a7064e552cf44e783bc75614d7082eece8b6f335 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-valid.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline-offset with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline-offset"> >+<meta name="assert" content="outline-offset supports the full grammar '<length>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("outline-offset", "0", "0px"); >+test_valid_value("outline-offset", "1px"); >+test_valid_value("outline-offset", "2em"); >+test_valid_value("outline-offset", "calc(3rem + 4vw)"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1ea6230af7d69a158a3b36778d675809b8d4c892 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 4: parsing outline-style with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui/#outline-style"> >+<meta name="assert" content="outline-style supports only the grammar 'auto | <outline-line-style>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("outline-style", "hidden"); >+test_invalid_value("outline-style", "dotted dashed"); >+test_invalid_value("outline-style", "solid double groove ridge"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cebf614508d15c4adc48498cc608caf52c82077f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-valid.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 4: parsing outline-style with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui/#outline-style"> >+<meta name="assert" content="outline-style supports the full grammar 'auto | <outline-line-style>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("outline-style", "auto"); >+test_valid_value("outline-style", "none"); >+test_valid_value("outline-style", "dotted"); >+test_valid_value("outline-style", "dashed"); >+test_valid_value("outline-style", "solid"); >+test_valid_value("outline-style", "double"); >+test_valid_value("outline-style", "groove"); >+test_valid_value("outline-style", "ridge"); >+test_valid_value("outline-style", "inset"); >+test_valid_value("outline-style", "outset"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-mandatory.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-mandatory.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f4cfe2cfd3217de5d2dd3e678e5761e42f4fb7b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-mandatory.html >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#serializing-css-values"> >+<meta name="assert" content="outline supports the full grammar '<outline-color> || <outline> || <outline>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("outline", "rgba(10, 20, 30, 0.4)"); >+ >+test_valid_value("outline", "auto"); >+test_valid_value("outline", "none"); // Edge serializes as "invert" >+test_valid_value("outline", "dotted"); >+test_valid_value("outline", "dashed"); >+test_valid_value("outline", "solid"); >+test_valid_value("outline", "double"); >+test_valid_value("outline", "groove"); >+test_valid_value("outline", "ridge"); >+test_valid_value("outline", "inset"); >+test_valid_value("outline", "outset"); >+ >+test_valid_value("outline", "0", "0px"); >+test_valid_value("outline", "1px"); >+test_valid_value("outline", "calc(2em + 3ex)"); >+test_valid_value("outline", "thin"); >+test_valid_value("outline", "medium"); // Edge serializes as "invert" >+test_valid_value("outline", "thick"); >+ >+test_valid_value("outline", "dashed thin"); >+test_valid_value("outline", "medium rgba(10, 20, 30, 0.4)", ["rgba(10, 20, 30, 0.4) medium", "rgba(10, 20, 30, 0.4)"]); >+ >+test_valid_value("outline", "3px ridge rgba(10, 20, 30, 0.4)", "rgba(10, 20, 30, 0.4) ridge 3px"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-optional.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-optional.html >new file mode 100644 >index 0000000000000000000000000000000000000000..66ec8973e2525af0f62cbad897a82be3aca49db6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-optional.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing outline with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#outline"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#serializing-css-values"> >+<meta name="assert" content="outline supports the full grammar '<outline-color> || <outline> || <outline>'."> >+<meta name="assert" content="outline serializes in canonical order, with shortest possible serialization."> >+<meta name="flags" content="may"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+// Conformant UAs may ignore the invert value on platforms that do not support color inversion of the pixels on the screen. >+test_valid_value("outline", "invert"); >+test_valid_value("outline", "invert dotted 1px"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..71cb53375495f7092239af0bcadbc266a4132585 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 4: parsing outline-width with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui/#outline-width"> >+<meta name="assert" content="outline-width supports only the grammar '<border-width>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("outline-width", "auto"); >+test_invalid_value("outline-width", "1%"); >+test_invalid_value("outline-width", "thin medium thick medium thin"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f68399150cbdbb7c638e66d21b18be18b29b297d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-valid.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 4: parsing outline-width with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui/#outline-width"> >+<meta name="assert" content="outline-width supports the full grammar '<border-width>'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("outline-width", "0", "0px"); >+test_valid_value("outline-width", "1px"); >+test_valid_value("outline-width", "2em"); >+test_valid_value("outline-width", "calc(2em + 3ex)"); >+test_valid_value("outline-width", "thin"); >+test_valid_value("outline-width", "medium"); >+test_valid_value("outline-width", "thick"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5fdb8ee71af5425a89f5383b36008d54acb950e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-invalid.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing resize with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize"> >+<meta name="assert" content="resize supports only the grammar 'none | both | horizontal | vertical'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("resize", "auto"); >+test_invalid_value("resize", "horizontal vertical"); >+test_invalid_value("resize", "both 0"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e9f03d99949687a3cc929fa6bb34868014cc43d2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-valid.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing resize with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#resize"> >+<meta name="assert" content="resize supports the full grammar 'none | both | horizontal | vertical'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("resize", "none"); >+test_valid_value("resize", "both"); >+test_valid_value("resize", "horizontal"); >+test_valid_value("resize", "vertical"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/parsing-testcommon.js b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/parsing-testcommon.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b075882f89aae49b419220b234534241cde5fd42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/parsing-testcommon.js >@@ -0,0 +1,39 @@ >+'use strict'; >+ >+// serializedValue can be the expected serialization of value, >+// or an array of permitted serializations, >+// or omitted if value should serialize as value. >+function test_valid_value(property, value, serializedValue) { >+ if (arguments.length < 3) >+ serializedValue = value; >+ >+ var stringifiedValue = JSON.stringify(value); >+ >+ test(function(){ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ assert_not_equals(div.style.getPropertyValue(property), "", "property should be set"); >+ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ var readValue = div.style.getPropertyValue(property); >+ if (serializedValue instanceof Array) >+ assert_in_array(readValue, serializedValue, "serialization should be sound"); >+ else >+ assert_equals(readValue, serializedValue, "serialization should be canonical"); >+ >+ div.style[property] = readValue; >+ assert_equals(div.style.getPropertyValue(property), readValue, "serialization should round-trip"); >+ >+ }, "e.style['" + property + "'] = " + stringifiedValue + " should set the property value"); >+} >+ >+function test_invalid_value(property, value) { >+ var stringifiedValue = JSON.stringify(value); >+ >+ test(function(){ >+ var div = document.createElement('div'); >+ div.style[property] = value; >+ assert_equals(div.style.getPropertyValue(property), ""); >+ }, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value"); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..1f003e6f2fa98d57a1a8514953d81fe577ab5cb5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resources/parsing-testcommon.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f39748160a26dd26c56873e2eb5f44d8344413e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-invalid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing text-overflow with invalid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#text-overflow"> >+<meta name="assert" content="text-overflow supports only the grammar 'clip | ellipsis'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_invalid_value("text-overflow", "auto"); >+test_invalid_value("text-overflow", "clip ellipsis clip"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-valid.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-valid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..80f267eab770726e18b92587e48dd215bc9a8528 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-valid.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8"> >+<title>CSS UI Level 3: parsing text-overflow with valid values</title> >+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/css-ui-3/#text-overflow"> >+<meta name="assert" content="text-overflow supports the full grammar 'clip | ellipsis'."> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/parsing-testcommon.js"></script> >+</head> >+<body> >+<script> >+test_valid_value("text-overflow", "clip"); >+test_valid_value("text-overflow", "ellipsis"); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..e98d1e74be71afda2d93021f45f95d4af668be5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/w3c-import.log >@@ -0,0 +1,38 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/box-sizing-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/caret-color-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/cursor-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-mandatory.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-color-valid-optional.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-offset-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-style-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-mandatory.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-valid-optional.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/outline-width-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/resize-valid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/parsing/text-overflow-valid.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-001-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-001-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..30be4f2200d22ec3b6e749dbc25061532fa60817 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-001-frame.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with #finish to ignore</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-002-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-002-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b05c150ea95ae02f17314b5b39ddd44ebe1e048d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-002-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-down: #finish root }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<style> >+ #start { >+ nav-down: #finish root; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a> <a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-003-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-003-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..31964687a255c76b88e476505f2adb35979a9adf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-003-frame.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with target #finish</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-004-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-004-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..12a41f84fcea76b888bbaedfdc63c7ad91537f3b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-004-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-up: #finish "frame" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<style> >+ #start { >+ nav-up: #finish "frame"; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a> <a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-005-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-005-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3a63e98a192ba4bccf5940117639e8db26aeb3b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-005-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-left: #finish "sibling" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="reviewer" title="Leif Arne Storset" href="mailto:lstorset@opera.com"> >+<link rel="reviewer" title="Rebecca Hauck" href="mailto:rhauck@adobe.com"><!-- 07-18-2013 --> >+<style> >+ #start { >+ nav-left: #finish "sibling"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a> <a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-009-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-009-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f11d32ed761618564856fab3d4d68139cade278a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-009-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with #finish to ignore</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-010-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-010-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..98d6c611f5e9cd0f588eac2fc9f45a2beeb7d482 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-010-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-down: #finish root }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-down: #finish root; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-011-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-011-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ce69bc810d623d2b0b0eb3571a8efa6a8d639c52 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-011-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with target #finish</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-012-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-012-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3854596cc41b71c93d5fd986f211eafb06468bf4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-012-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-down: #finish "frame" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-down: #finish "frame"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+ <p><a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-013-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-013-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..868281fd100759b1e62f5dae907409271cfbf70f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-013-frame.html >@@ -0,0 +1,17 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-down: #finish "sibling" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-down: #finish "sibling"; >+ } >+</style> >+<body> >+ <p> >+ <a href="" id="start">START</a> >+ </p> >+ <p> >+ <a href="" id="finish">ignore</a> >+ </p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-009-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-009-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f11d32ed761618564856fab3d4d68139cade278a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-009-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with #finish to ignore</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-010-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-010-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e09a3750a934b052c9df7471f4066be80214489e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-010-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-left: #finish root }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-left: #finish root; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a> <a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-011-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-011-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ce69bc810d623d2b0b0eb3571a8efa6a8d639c52 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-011-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with target #finish</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-012-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-012-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..94a0fe5ed8e91f10bb67054bd6052ce21d089230 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-012-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-left: #finish "frame" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-left: #finish "frame"; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a> <a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-013-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-013-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e52c9482f4c49cff8cdc38e2faaefe0726a5d381 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-013-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-left: #finish "sibling" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-left: #finish "sibling"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a> <a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-009-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-009-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f11d32ed761618564856fab3d4d68139cade278a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-009-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with #finish to ignore</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-010-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-010-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..317325761171a5c66faef78954da1f999d92948a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-010-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-right: #finish root }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-right: #finish root; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a> <a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-011-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-011-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ce69bc810d623d2b0b0eb3571a8efa6a8d639c52 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-011-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with target #finish</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-012-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-012-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..71f8b3cfb97af74c5badf3b8c9450782c97b88a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-012-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-right: #finish "frame" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-right: #finish "frame"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">FINISH</a> <a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-013-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-013-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e133d15473c5714b01a4450da8f68a4a61b83c8a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-013-frame.html >@@ -0,0 +1,12 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-right: #finish "sibling" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-right: #finish "sibling"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a> <a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-009-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-009-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f11d32ed761618564856fab3d4d68139cade278a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-009-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with #finish to ignore</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-010-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-010-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ba04833c3b0fbfc5356018709a0a9adce546c3a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-010-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-up: #finish root }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-up: #finish root; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+ <p><a href="" id="start">START</a> </p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-011-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-011-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ce69bc810d623d2b0b0eb3571a8efa6a8d639c52 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-011-frame.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with target #finish</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<body> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-012-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-012-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d0375869f24b809d1adefef1fd0111b112dbd6af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-012-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-up: #finish "frame" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-up: #finish "frame"; >+ } >+</style> >+<body> >+ <p><a href="" id="start">START</a></p> >+ <p><a href="" id="finish">FINISH</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-013-frame.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-013-frame.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e9af2dbf9281f6043784ab6a9f6406be5c176a92 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-013-frame.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>CSS Basic User Interface Test: Directional Focus Navigation - frame with: #start { nav-up: #finish "sibling" }</title> >+<link rel="author" title="Jorrit Vermeiren" href="mailto:jorritv@opera.com"> >+<link rel="author" title="Daniel Glazman" href="mailto:d.glazman@partner.samsung.com"> >+<style> >+ #start { >+ nav-up: #finish "sibling"; >+ } >+</style> >+<body> >+ <p><a href="" id="finish">ignore</a></p> >+ <p><a href="" id="start">START</a></p> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/w3c-import.log >index 2b2b0a6321b63700cdbbe07b1fcd1587ffbfa0db..c9e0f909f55d3e7f6e14366f8f085bf0dc8f1b07 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/w3c-import.log >@@ -18,6 +18,31 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/green.ico > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/h100.svg > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/h100_r1-1.svg >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-001-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-002-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-003-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-004-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-dir-target-005-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-009-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-010-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-011-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-012-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-down-013-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-009-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-010-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-011-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-012-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-left-013-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-009-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-010-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-011-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-012-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-right-013-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-009-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-010-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-011-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-012-frame.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/nav-up-013-frame.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/orange.png > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/orange.svg > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/support/r1-1.svg >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2d1ad83ccddc812f8b4a84c9806f1d3b8a04e0f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024-expected.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Reference: text-overflow on tr::before with overflow:hidden</title> >+ <style type="text/css"> >+ >+ td { >+ overflow: hidden; >+ white-space: nowrap; >+ text-overflow: ellipsis; >+ } >+ >+ </style> >+</head> >+<body> >+PASS if there is an ellipsis at the end of the text below. >+ <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> >+ <tr><td>Some long text here that overflows and whatnot.</td></tr> >+ </table> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c6e55f3efe3545e0b1448b3c28bf645f904e603a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Test: text-overflow on tr::before with overflow:hidden</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> >+ <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> >+ <link rel="match" href="text-overflow-024-ref.html"> >+ <style type="text/css"> >+ >+ tr::before { >+ content: "Some long text here that overflows and whatnot."; >+ display: table-cell; >+ overflow: hidden; >+ white-space: nowrap; >+ text-overflow: ellipsis; >+ } >+ >+ </style> >+</head> >+<body> >+PASS if there is an ellipsis at the end of the text below. >+ <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> >+ <tr></tr> >+ </table> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9a3d9e38af466483a2d61afcd44044bc25e6d123 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025-expected.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Reference: text-overflow on tr::before without overflow:hidden</title> >+ <style type="text/css"> >+ >+ td { >+ white-space: nowrap; >+ } >+ >+ </style> >+</head> >+<body> >+PASS if there is no ellipsis below. >+ <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> >+ <tr><td>Some long text here that overflows and whatnot.</td></tr> >+ </table> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5ee5243c6270aa89971731a33c0088bddf2f9831 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Test: text-overflow on tr::before without overflow:hidden</title> >+ <link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> >+ <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> >+ <link rel="match" href="text-overflow-025-ref.html"> >+ <style type="text/css"> >+ >+ tr::before { >+ content: "Some long text here that overflows and whatnot."; >+ display: table-cell; >+ white-space: nowrap; >+ text-overflow: ellipsis; >+ } >+ tr { >+ overflow: hidden; >+ } >+ >+ </style> >+</head> >+<body> >+PASS if there is no ellipsis below. >+ <table style="table-layout: fixed; width: 130px" cellpadding="0" cellspacing="0"> >+ <tr></tr> >+ </table> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e47512c0d68690fa2f1277db5415622db25730f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026-expected.html >@@ -0,0 +1,62 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Reference: text-overflow with leading white-space</title> >+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1403986"> >+ <style type="text/css"> >+html,body { >+ color:black; background-color:white; font:16px/1 monospace; >+} >+ >+.ellipsize { >+ white-space: nowrap; >+ overflow: hidden; >+ text-overflow: ellipsis; >+ width: 100px; >+ border: 1px solid; >+} >+ >+.inline-block { >+ display: inline-block; >+ background: red; >+} >+ </style> >+</head> >+<body> >+ >+<pre> >+The test PASS if all of the following are true: >+1. there are no red areas >+2. the first two blocks display "PASS" but no ellipsis >+3. the last three blocks display an ellipsis >+</pre> >+ >+<div class="ellipsize" style="text-overflow: clip"> >+ <span style="margin-left:5px"></span><span class="inline-block" style="background:lime"> >+ PASS PASS PASS PASS PASS</span> >+</div> >+ >+<div class="ellipsize" style="text-overflow: clip"> >+ <span style="margin-left:5px"></span> >+ <span class="inline-block" style="background:lime"> >+ PASS PASS PASS PASS PASS</span> >+</div> >+ >+<div class="ellipsize"> >+ <span style="margin-left:10px"></span> … >+</div> >+ >+<div class="ellipsize"> >+ … >+</div> >+ >+<div class="ellipsize"> >+ a… >+</div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9b9e05d472ebeed9e10cc0c93d7a1cd3020d741e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026.html >@@ -0,0 +1,67 @@ >+<!DOCTYPE HTML> >+<!-- >+ Any copyright is dedicated to the Public Domain. >+ http://creativecommons.org/publicdomain/zero/1.0/ >+ --> >+<html><head> >+ <meta charset="utf-8"> >+ <title>Test: text-overflow with leading white-space</title> >+ <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1403986"> >+ <link rel="help" href="https://www.w3.org/TR/css3-ui/#text-overflow" title="5.2. the 'text-overflow' property"> >+ <link rel="match" href="text-overflow-026-ref.html"> >+ <style type="text/css"> >+html,body { >+ color:black; background-color:white; font:16px/1 monospace; >+} >+ >+.ellipsize { >+ white-space: nowrap; >+ overflow: hidden; >+ text-overflow: ellipsis; >+ width: 100px; >+ border: 1px solid; >+} >+ >+.inline-block { >+ display: inline-block; >+ background: red; >+} >+ </style> >+</head> >+<body> >+ >+<pre> >+The test PASS if all of the following are true: >+1. there are no red areas >+2. the first two blocks display "PASS" but no ellipsis >+3. the last three blocks display an ellipsis >+</pre> >+ >+<div class="ellipsize"> >+ <span style="margin-left:5px"></span><span class="inline-block" style="background:lime"> >+ PASS PASS PASS PASS PASS</span> >+</div> >+ >+<div class="ellipsize"> >+ <span style="margin-left:5px"></span> >+ <span class="inline-block" style="background:lime"> >+ PASS PASS PASS PASS PASS</span> >+</div> >+ >+<div class="ellipsize"> >+ <span style="margin-left:10px"></span> <span class="inline-block"> >+ FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> >+</div> >+ >+<div class="ellipsize"> >+ <span class="inline-block"> >+ FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> >+</div> >+ >+<div class="ellipsize"> >+ a<span class="inline-block"> >+ FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL </span> >+</div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8fc664b5d9adc153cf899a6863341a8c001f5e65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Test Reference</title> >+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> >+<style> >+div { font-family: monospace; } >+</style> >+ >+<p>The test passes if the following text is visible below: 123456 FEâ¦</p> >+<div>123456 FEâ¦</bdo></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fcb010405f5eaa7dfcba93f1579fa1847a5e00e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Test: text-overflow applies visually to bidi</title> >+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow"> >+<link rel="match" href="reference/text-overflow-027-ref.html"> >+<meta name="flags" content=""> >+<meta name="assert" content="text-overflow is a visual operation that occurs after layout, and therfore ellides text from the visual end of the line, even in bidi situations"> >+<style> >+div { >+ font-family: monospace; >+ width: 10ch; >+ overflow: hidden; >+ text-overflow: ellipsis; >+ white-space: pre; >+} >+</style> >+ >+<p>The test passes if the following text is visible below: 123456 FEâ¦</p> >+<div>123456 <bdo dir=rtl>ABCDEF</bdo></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b25ab2600b4cafe7a23df6037357327e223464ab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Test Reference</title> >+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> >+<style> >+div { font-family: monospace; } >+</style> >+ >+<p>The test passes if the following text is visible below: â¦56 FEDCBA</p> >+<div>â¦56 FEDCBA</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028.html >new file mode 100644 >index 0000000000000000000000000000000000000000..af906e1d2b06136401103b61d9062395a1c80301 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Test: text-overflow applies visually to bidi</title> >+<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow"> >+<link rel="match" href="reference/text-overflow-028-ref.html"> >+<meta name="flags" content=""> >+<meta name="assert" content="text-overflow is a visual operation that occurs after layout, and therfore ellides text from the visual end of the line, even in bidi situations"> >+<style> >+div { >+ font-family: monospace; >+ width: 10ch; >+ overflow: hidden; >+ text-overflow: ellipsis; >+ white-space: pre; >+} >+</style> >+ >+<p>The test passes if the following text is visible below: â¦56 FEDCBA</p> >+<div dir=rtl><bdo dir=rtl>ABCDEF</bdo> 123456</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9cdd741ec20efd8132628dd3dddd1758cc55ab40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<html lang="en"> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Reference</title> >+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> >+<style> >+div { font: 20px monospace; } >+</style> >+ >+<div>Test passedâ¦</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029.html b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f1780117c4e824fd952c4ab6a95ab91f11914f9e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html lang="en"> >+<meta charset="utf-8"> >+<title>CSS Basic User Interface Test: text-overflow and bidi interaction</title> >+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-3/#text-overflow"> >+<link rel="help" href="http://www.w3.org/TR/css-ui-4/#text-overflow"> >+<link rel="match" href="reference/text-overflow-029-ref.html"> >+<meta name="assert" content="When there's content of mixed directionality, text-overflow ellides the characters at the physical end of the line."> >+<meta name="flags" content=""> >+<style> >+div { >+ font: 20px monospace; >+ width: 12.3ch; /* slightly more than 12ch because in some browsers (safari) the ellipsis is slightly large than other characters, even in monospace fonts. */ >+ text-overflow: ellipsis; >+ white-space: nowrap; >+ overflow: hidden; >+} >+</style> >+ >+<div>Test ‮deliafdessap‬</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/w3c-import.log >index 75366d9dd5d67f3cc45d0584e8b219afcc131854..f79d11f70cd168574cb129d2c18593e23de7432c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/w3c-import.log >@@ -190,6 +190,89 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/cursor-x-y-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/cursor-x-y-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/cursor-x-y-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-1.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-2.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-3.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-missing-4.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-dir-target-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-013.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-down-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-013.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-left-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-013.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-right-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-000.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-013.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/nav-up-016.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-002-expected.xht >@@ -226,6 +309,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-018.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-019-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-019.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-020.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-color-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-color-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/outline-offset-001-expected.xht >@@ -304,5 +389,17 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-022-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-022.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-023.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-024.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-025.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-026.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-027.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-028.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-029.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/css-ui/text-overflow.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/CaretPosition-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/CaretPosition-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d8e97a92342cb8ba7e7a185132849ae60485c329 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/CaretPosition-001.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>CSSOM View Module test:CaretPosition</title> >+<link rel="author" title="unbug" href="mailto:tidelgl@gmail.com" /> >+<link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-document-elementfrompoint"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type="text/css"> >+.box{ >+ position: absolute; >+ top : 100px; >+ left : 400px; >+ width: 100px; >+ height: 100px; >+ background-color: #000; >+} >+</style> >+</head> >+<body> >+<div id="box" class="box"></div> >+<div class="box"></div> >+<div class="box"></div> >+<div class="box"></div> >+<div class="box"></div> >+<div class="box"></div> >+<div id="box2" class="box"></div> >+<div id="box3" class="box" style="left: 405px;background:red;"></div> >+<div id="log"></div> >+<script> >+test(function(){ >+ assert_equals(document.elementFromPoint(400, 100), >+ document.getElementById('box2'), >+ "Expected value for element id is 'box2'"); >+}, 'Element at (400, 100)'); >+ >+test(function(){ >+ assert_equals(document.elementFromPoint(400, 900), >+ null, >+ "Expected value for element id is 'box2'"); >+}, 'Element at (400, 900)'); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/DOMRectList.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/DOMRectList.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dafced99478580ac45a8a7cc79d405d5f260b862 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/DOMRectList.html >@@ -0,0 +1,24 @@ >+<!DOCTYPE html> >+<title>CSSOM View APIs that return a DOMRectList</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=x>x</div> >+<script> >+setup(() => { >+ window.element = document.getElementById('x'); >+}); >+ >+test(() => { >+ const domRectList = element.getClientRects(); >+ assert_class_string(domRectList, 'DOMRectList'); >+ assert_class_string(domRectList.item(0), 'DOMRect'); >+}, 'Element getClientRects()'); >+ >+test(() => { >+ const range = new Range(); >+ range.selectNodeContents(element); >+ const domRectList = range.getClientRects(); >+ assert_class_string(domRectList, 'DOMRectList'); >+ assert_class_string(domRectList.item(0), 'DOMRect'); >+}, 'Range getClientRects()'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/GetBoundingRect.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/GetBoundingRect.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7286bd09882e783e2a3c8647b5d6111dcfe0b36a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/GetBoundingRect.html >@@ -0,0 +1,31 @@ >+<!doctype html> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>getBoundingClientRect</title> >+ <link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ >+ <style> >+ #foo { >+ margin: 0px 0px 0px 5px; >+ transform: translate(10px, 200px); >+ position: fixed; >+ left: 5px; >+ background-color: red; >+ } >+ </style> >+ </head> >+ <body> >+ <div id="foo"> >+ FOO >+ </div> >+ <script> >+ test(function () { >+ var foo = document.getElementById("foo").getBoundingClientRect(); >+ assert_equals(foo.left, 20); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/HTMLBody-ScrollArea_quirksmode.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/HTMLBody-ScrollArea_quirksmode.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8255d130345897de077b27c900109e1217e6ce63 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/HTMLBody-ScrollArea_quirksmode.html >@@ -0,0 +1,145 @@ >+<html> >+<script src="/resources/testharness.js" type="text/javascript"></script> >+<script src="/resources/testharnessreport.js" type="text/javascript"></script> >+<style type="text/css"> >+ body { >+ border:1px solid black; >+ width:200px; >+ height:40px; >+ >+ padding-bottom:50px; >+ padding-right:40px; >+ } >+ #elemSimple { >+ background:yellow; >+ width:60px; >+ height:30px; >+ } >+ #elemOverflow { >+ background:yellow; >+ width:250px; >+ height:150px; >+ } >+</style> >+<body id="thebody"> >+ <div id="thediv"></div> >+</body> >+<script> >+// Testing for html body element's scroll- x, y, width, height behaviour in quirks mode >+// https://drafts.csswg.org/cssom-view/#potentially-scrollable >+// https://drafts.csswg.org/cssom-view/#dom-element-scrollheight >+test(function() { >+ // can i get the div element? >+ var thediv = document.getElementById("thediv"); >+ assert_equals(thediv.id, "thediv"); >+ // can i get the body element? >+ var thebody = document.getElementById("thebody"); >+ assert_equals(thebody.id, "thebody"); >+}, "Ensure that body element is loaded.") >+ >+test(function() { >+ document.body.style.overflowY = "hidden"; >+ assert_equals(document.body.style.overflowY, "hidden", "Could not set document.body.style.overflowY to 'hidden'."); >+ document.body.style.overflowY = "scroll"; >+ assert_equals(document.body.style.overflowY, "scroll", "Could not set document.body.style.overflowY to 'scroll'."); >+ document.documentElement.style.overflowY = "scroll"; >+ assert_equals(document.documentElement.style.overflowY, "scroll", "Could not set document.documentElement.style.overflow to 'scroll'."); >+ document.documentElement.style.overflowY = ""; >+ document.body.style.overflowY = ""; >+}, "Ensure that style.overflowY can be set properly.") >+ >+test(function() { >+ assert_equals(document.compatMode, "BackCompat", "Should be in quirks mode."); >+}, "document.compatMode should be BackCompat in quirks.") >+ >+test(function() { >+ var thebody = document.getElementById("thebody"); >+ assert_equals(thebody.id, "thebody"); >+ assert_equals(document.scrollingElement, thebody, >+ "scrollingElement in quirks mode should default to body element."); >+}, "document.scrollingElement should be body element in quirks.") >+ >+test(function() { >+ document.documentElement.style.overflowY = "scroll"; >+ assert_equals(document.documentElement.style.overflowY, "scroll", "Could not set document.documentElement.style.overflowY to 'scroll'."); >+ >+ var thebody = document.getElementById("thebody"); >+ assert_equals(thebody.id, "thebody"); >+ thebody.style.overflowY="scroll"; >+ assert_equals(document.body.style.overflowY, "scroll", "Could not set document.body.style.overflowY to 'scroll'."); >+ // Body and document now both have overflow != visible >+ // => body `potentially scrollable` >+ >+ // In quirks, when body is not `potentially scrollable` >+ // document.scrollingElment returns the body, otherwise null >+ // https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement >+ assert_equals(document.scrollingElement, null, >+ "In quirks, we would expect null here (because of potentially scrollable body)"); >+}, "scrollingElement in quirks should be null when body is potentially scrollable.") >+ >+test(function() { >+ document.documentElement.style.overflowY = "visible"; >+ assert_equals(document.documentElement.style.overflowY, "visible"); >+ assert_equals(document.scrollingElement, document.body); >+ >+ document.documentElement.style.overflowY = "scroll"; >+ assert_equals(document.documentElement.style.overflowY, "scroll"); >+ document.body.style.overflowY = "visible"; >+ assert_equals(document.body.style.overflowY, "visible"); >+ assert_equals(document.scrollingElement, document.body); >+ >+ document.documentElement.style.overflowY = "visible"; >+ assert_equals(document.documentElement.style.overflowY, "visible"); >+ assert_equals(document.scrollingElement, document.body); >+}, "scrollingElement in quirks should be body if any of document and body has a visible overflow.") >+ >+// no overflow property set to `visible` => pot. scrollable >+test(function() { >+ document.body.style.overflowY = "scroll"; >+ assert_equals(document.body.style.overflowY, "scroll"); >+ document.documentElement.style.overflowY = "scroll"; >+ assert_equals(document.documentElement.style.overflowY, "scroll"); >+ >+ assert_greater_than(window.innerHeight, 400, "Window not large enough for valid test run."); >+ assert_not_equals(document.body.scrollHeight, window.innerHeight); >+ >+ var elem = document.getElementById("thediv"); >+ elem.style.height = "170px"; >+ assert_equals(elem.style.height, "170px"); >+ >+ oldScrollHeight = document.body.scrollHeight; >+ elem.style.height = "190px"; >+ assert_equals(elem.style.height, "190px"); >+ assert_equals(document.body.scrollHeight, oldScrollHeight+20); >+}, "When body potentially scrollable, document.body.scrollHeight changes when changing the height of the body content in quirks.") >+ >+// any use of `visible` => not potentially scrollable >+function testNotPotScrollable (document_overflow, body_overflow) { >+ document.body.style.overflowY = body_overflow; >+ assert_equals(document.body.style.overflowY, body_overflow); >+ document.documentElement.style.overflowY = document_overflow; >+ assert_equals(document.documentElement.style.overflowY, document_overflow); >+ >+ assert_greater_than(window.innerHeight, 400, "Window not large enough for valid test run."); >+ assert_equals(document.body.scrollHeight, window.innerHeight); >+ >+ var elem = document.getElementById("thediv"); >+ elem.style.height = "170px"; >+ assert_equals(elem.style.height, "170px"); >+ assert_equals(window.innerHeight, document.body.scrollHeight); >+ >+ oldScrollHeight = document.body.scrollHeight; >+ elem.style.height = "190px"; >+ assert_equals(elem.style.height, "190px"); >+ assert_equals(window.innerHeight, document.body.scrollHeight); >+ assert_equals(document.body.scrollHeight, oldScrollHeight); >+} >+ >+tests = [["visible", "scroll"], ["scroll", "visible"], ["visible", "visible"]]; >+for (var i = 0; i < tests.length; i++) { >+ test( function () { >+ testNotPotScrollable (tests[i][0], tests[i][1]); >+ }, "When body not potentially scrollable, document.body.scrollHeight always equals window.innerHeight in quirks. (cond. "+tests[i][0]+", "+tests[i][1]+")") >+} >+</script> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..06c81d5de4c67efaba23f18abcbf8532257a54eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-001.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View Module test:MediaQueryList</title> >+ <link rel="author" title="unbug" href="mailto:tidelgl@gmail.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style type="text/css"> >+ </style> >+</head> >+<body> >+ <p>This case tests the MediaQueryList</p> >+ <div id="log"></div> >+ <script> >+ test(function(){ >+ assert_equals(window.matchMedia('(min-width: 1px)').matches, true, "Expected any device to match min-width: 1px"); >+ },'matchMedia'); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-with-empty-string.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-with-empty-string.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3d5a5316566411c49895e845d8dd0df8e7553a1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-with-empty-string.html >@@ -0,0 +1,12 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>cssom-view - MediaQueryList with empty string</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+test(function () { >+ var mql = window.matchMedia(''); >+ assert_equals(mql.media, '', "This should be an empty media query list"); >+ assert_equals(mql.matches, true, "Empty media query list should evaluate to true"); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..5e0cb233944bd24a5ce9c39d983c70ed601e2261 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/OWNERS >@@ -0,0 +1,2 @@ >+@AutomatedTester >+@plinss >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2a8d5b5b4928a5782a61174834bb547f094f2553 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View Module test:Screen-pixelDepth,Screen-colorDepth</title> >+ <link rel="author" title="unbug" href="mailto:tidelgl@gmail.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style type="text/css"> >+ </style> >+</head> >+<body> >+ <p>This case tests the Screen pixelDepth and colorDepth</p> >+ <p>The test passes if the value is 24</p> >+ <div id="log"></div> >+ <script> >+ test(function(){ >+ assert_equals(testColorDepth(), 24, "Expected value for colorDepth is 24"); >+ },'testColorDepth'); >+ test(function(){ >+ assert_equals(testPixelDepth(), 24, "Expected value for pixelDepth is 24"); >+ },'testPixelDepth'); >+ function testColorDepth(){ >+ var colorDepth = window.screen.colorDepth; >+ return colorDepth; >+ } >+ function testPixelDepth(){ >+ var pixelDepth = window.screen.pixelDepth; >+ return pixelDepth; >+ } >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d96540adfe95205a770c232473e0c1268e609e2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-001.html >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 6.1 - getBoundingClientRect tests</title> >+ <meta charset="utf-8"> >+ <link rel="author" title="Chris Wu" href="mailto:pwx.frontend@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect"> >+ <meta name="flags" content="dom"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style type="text/css"> >+ #testItem { >+ width: 279px; >+ height: 188px; >+ margin: 100px 0 0 178px; >+ background-color: purple; >+ font-size: 26px; >+ font-weight: bold; >+ text-align: center; >+ line-height: 188px; >+ } >+ </style> >+</head> >+<body> >+ <div id="testItem">test item</div> >+ <div id="log"></div> >+ <script> >+ var titem = document.getElementById('testItem').getBoundingClientRect(); >+ test( >+ function(){ >+ assert_equals(titem.bottom - titem.top, titem.height, "height should equal bottom minus top") >+ }, "getBoundingClientRect() should return a DOMRect where height=bottom-top" >+ ); >+ test( >+ function(){ >+ assert_equals(titem.right - titem.left, titem.width, "width should equal right minus left") >+ }, "getBoundingClientRect() should return a DOMRect where width=right-left" >+ ) >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a7c3568969a77903d9b49f6b09d70046ba2b98b7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-002.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <title>CSS Test (CSSOM View): getBoundingClientRect of element outside DOM</title> >+ <link rel="author" title="Chris Rebert" href="http://chrisrebert.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-getclientrects"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="Calling getBoundingClientRect on an element that is outside of the DOM (and therefore does not have an associated layout box) should result in an all-zeroes DOMRect and should definitely not throw an error."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script> >+ test( >+ function () { >+ var rect = document.createElement('div').getBoundingClientRect(); >+ assert_equals(rect.x, 0, "DOMRect's x should be zero"); >+ assert_equals(rect.y, 0, "DOMRect's y should be zero"); >+ assert_equals(rect.width, 0, "DOMRect's width should be zero"); >+ assert_equals(rect.height, 0, "DOMRect's height should be zero"); >+ }, >+ "getBoundingClientRect on a newly-created Element not yet inserted into the DOM should return an all-zeroes DOMRect" >+ ); >+ </script> >+</head> >+<body></body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoxQuads-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoxQuads-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..813c245c7bef7cc726c843445378fb640044e574 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoxQuads-001.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSSOM View - getBoxQuads() returns proper border and margin boxes for block and flex</title> >+ <link rel="help" href="https://drafts.csswg.org/cssom-view/#the-geometryutils-interface"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ >+ <style> >+ .container { >+ width: 100px; >+ height: 50px; >+ background-color: gray; >+ } >+ span { >+ display: block; >+ background: gold; >+ height: 4px; >+ width: 14px; >+ margin: auto; >+ padding: 0px; >+ border: 3px solid blue; >+ } >+ </style> >+ </head> >+ <body> >+ <div class="container"> >+ <span id="block-block"></span> >+ </div> >+ >+ <div class="container" style="display:flex"> >+ <span id="flex-block"></span> >+ </div> >+ >+ <script> >+ test(function() { >+ let bb = document.getElementById("block-block"); >+ assert_equals(bb.getBoxQuads({box: "border"})[0].bounds.width, 20, "Block layout border box is expected width."); >+ assert_equals(bb.getBoxQuads({box: "margin"})[0].bounds.width, 100, "Block layout margin box is expected width."); >+ >+ // For containers that expand items to fill block-axis space, measure the box heights also. >+ let fb = document.getElementById("flex-block"); >+ assert_equals(fb.getBoxQuads({box: "border"})[0].bounds.width, 20, "Flex layout border box is expected width."); >+ assert_equals(fb.getBoxQuads({box: "margin"})[0].bounds.width, 100, "Flex layout margin box is expected width."); >+ >+ assert_equals(fb.getBoxQuads({box: "border"})[0].bounds.height, 10, "Flex layout border box is expected height."); >+ assert_equals(fb.getBoxQuads({box: "margin"})[0].bounds.height, 50, "Flex layout margin box is expected height."); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9fd791d5db7b195acf24ae0c8d60323ff6e33131 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects-002.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSSOM View - GetClientRects().length is the same regardless source new lines</title> >+ <link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-element-getclientrects"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <span id="single"> >+ test test >+ </span><br/> >+ <span id="multiple"> >+ test >+ test >+ </span> >+ <script> >+ test(function () { >+ const count = document.querySelector("#single").getClientRects().length; >+ const count2 = document.querySelector("#multiple").getClientRects().length; >+ assert_equals(count, 1, "count"); >+ assert_equals(count2, 1, "count2"); >+ }); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects.html >new file mode 100644 >index 0000000000000000000000000000000000000000..36559eb116a62f0ad86564b4cd76c6b28f6a12eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects.html >@@ -0,0 +1,23 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <title>CSS Test (CSSOM View): getClientRects of element outside DOM</title> >+ <link rel="author" title="Chris Rebert" href="http://chrisrebert.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-getclientrects"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="Calling getClientRects on an element that is outside of the DOM (and therefore does not have an associated layout box) should result in an empty DOMRectList and should definitely not throw an error."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script> >+ test( >+ function () { >+ var rectList = document.createElement('div').getClientRects(); >+ assert_equals(rectList.length, 0, "DOMRectList should be empty"); >+ }, >+ "getClientRects on a newly-created Element not yet inserted into the DOM should return an empty DOMRectList" >+ ); >+ </script> >+</head> >+<body></body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-img-attributes-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-img-attributes-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2f42288104150cf8417bb5b12b07e88c4d20ef4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-img-attributes-001.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: HTMLImageElement x and y attributes</title> >+ <link rel="author" title="Adobe" href="http://html.adobe.com/"> >+ <link rel="author" title="Alan Stearns" href="mailto:stearns@adobe.com"> >+ <link rel="reviewer" title="" href=""> >+ <link rel="help" href="https://drafts.csswg.org/cssom-view/#excensions-to-the-htmlimageelement-interface"> >+ <meta name="assert" content="HTMLImageElement attributes give x and y position of CSS layout box"> >+ <meta name="flags" content="dom"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ >+ function testIMGAttributes(attribute_name, display_none) { >+ var element = document.createElement("img"); >+ document.body.appendChild(element); >+ element.style.setProperty("position", "absolute"); >+ element.style.setProperty("left", "10px"); >+ element.style.setProperty("top", "10px"); >+ if (display_none) { >+ element.style.setProperty("display", "none"); >+ } >+ var attributeValue = element[attribute_name]; >+ document.body.removeChild(element); >+ return attributeValue; >+ } >+ >+ var imgAttributes = [ >+ ["x", false, 10], >+ ["y", false, 10], >+ ["x", true, 0], >+ ["y", true, 0], >+ ]; >+ >+ imgAttributes.forEach(function(test_data) { >+ test (function() { assert_equals(testIMGAttributes(test_data[0], test_data[1]), test_data[2])}, >+ "test " + test_data[0] + " with display " + test_data[1]) >+ } >+ ); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-window-screen-interface.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-window-screen-interface.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7abd2e591e98940e2ac26df7e89c0bd18b94decc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-window-screen-interface.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: cssom view window screen attribute</title> >+ <link rel="author" title="jingke" href="mailto:jingkewhu@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="window screen interface"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ </head> >+ <body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <script> >+ /*test readonly*/ >+ test(function(){assert_readonly(window.screen, "availWidth");}, "Screen.availWidth is readonly"); >+ test(function(){assert_readonly(window.screen, "availHeight");}, "Screen.availHeight is readonly"); >+ test(function(){assert_readonly(window.screen, "width");}, "Screen.width is readonly"); >+ test(function(){assert_readonly(window.screen, "height");}, "Screen.height is readonly"); >+ test(function(){assert_readonly(window.screen, "colorDepth");}, "Screen.colorDepth is readonly"); >+ test(function(){assert_readonly(window.screen, "pixelDepth");}, "Screen.pixelDepth is readonly"); >+ >+ >+ test(function(){assert_true(window.screen.width >= 0 && window.screen.width < 6000000);}, >+ "window.screen.width >= 0 && window.screen.width < 6000000"); >+ test(function(){assert_true(window.screen.height >= 0 && window.screen.height < 6000000);}, >+ "window.screen.height >= 0 && window.screen.height < 6000000"); >+ test(function(){assert_true(window.screen.availWidth >= 0 && window.screen.availWidth <= window.screen.width);}, >+ "window.screen.availWidth >= 0 && window.screen.availWidth <= window.screen.width"); >+ test(function(){assert_true(window.screen.availHeight >= 0 && window.screen.availHeight <= window.screen.height);}, >+ "window.screen.availHeight >= 0 && window.screen.availHeight <= window.screen.height"); >+ test(function(){assert_in_array(window.screen.colorDepth, [0, 16, 24, 32]);}, >+ "window.screen.colorDepth == 0 || window.screen.colorDepth == 16 || window.screen.colorDepth == 24 || window.screen.colorDepth == 32"); >+ test(function(){assert_equals(window.screen.pixelDepth, window.screen.colorDepth);}, >+ "window.screen.pixelDepth must return the value returned by window.screen.colorDepth"); >+ </script> >+ >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c2fcc42c530cf21ac3307eca16b5e78d5eb07b9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-001.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 5 - extensions to the Document interface</title> >+ <link rel="author" title="Neils Christoffersen" href="mailto:neils.christoffersen@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="elementFromPoint returns correct element"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ #targetDiv { >+ position: absolute; >+ top: 10; >+ left: 10; >+ height: 100px; >+ width: 100px; >+ } >+ </style> >+</head> >+<body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <div id="targetDiv"> >+ </div> >+ <script> >+ var element = document.elementFromPoint(15, 15); >+ >+ test ( function() { >+ assert_equals(element.id, "targetDiv", "elementFromPoint didn't return the correct element"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ebab52feada4cb346f2a68c53a0357232271a334 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-002.html >@@ -0,0 +1,40 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Checking whether dynamic changes to visibility interact correctly with >+ table anonymous boxes</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<style> >+#overlay { >+ display: table; >+ position: absolute; >+ top: 0; >+ left: 0; >+ width: 100%; >+ height: 100%; >+ background: white; >+ z-index: 999 >+} >+ >+#wrapper { position: relative; } >+</style> >+<div id=log></div> >+<div id="wrapper"> >+ <div id="overlay"><div></div></div> >+ <div id="target">Some text</div> >+</div> >+<script> >+ test(function() { >+ var t = document.querySelector("#target"); >+ var rect = t.getBoundingClientRect(); >+ var hit = document.elementFromPoint(rect.x + rect.width/2, >+ rect.y + rect.height/2); >+ assert_equals(hit, t.previousElementSibling, >+ "Should hit the overlay first."); >+ t.previousElementSibling.style.visibility = "hidden"; >+ hit = document.elementFromPoint(rect.x + rect.width/2, >+ rect.y + rect.height/2); >+ assert_equals(hit, t, >+ "Should hit our target now that the overlay is hidden."); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-003.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0a1ac40e7223ba3d717810cd179b770ca09d7081 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-003.html >@@ -0,0 +1,48 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Checking whether dynamic changes to visibility interact correctly with >+ table anonymous boxes</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<style> >+#overlay { >+ display: table; >+ position: absolute; >+ top: 0; >+ left: 0; >+ width: 100%; >+ height: 100%; >+ background: white; >+ z-index: 999 >+} >+ >+#wrapper { position: relative; } >+</style> >+<div id=log></div> >+<div id="wrapper"> >+ <div id="overlay"><div></div></div> >+ <div id="target">Some text</div> >+</div> >+<script> >+ test(function() { >+ // Make sure we have boxes constructed already. >+ document.body.offsetWidth; >+ var overlay = document.querySelector("#overlay"); >+ overlay.insertBefore(document.createElement("div"), overlay.firstChild); >+ overlay.appendChild(document.createElement("div")); >+ // Make sure we have boxes constructed for those inserts/appends >+ document.body.offsetWidth; >+ overlay.firstChild.nextSibling.remove(); >+ var t = document.querySelector("#target"); >+ var rect = t.getBoundingClientRect(); >+ var hit = document.elementFromPoint(rect.x + rect.width/2, >+ rect.y + rect.height/2); >+ assert_equals(hit, t.previousElementSibling, >+ "Should hit the overlay first."); >+ t.previousElementSibling.style.visibility = "hidden"; >+ hit = document.elementFromPoint(rect.x + rect.width/2, >+ rect.y + rect.height/2); >+ assert_equals(hit, t, >+ "Should hit our target now that the overlay is hidden."); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e0acb90fb8fe76f3b0c5b561d84a3bdc6e05bd78 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html >@@ -0,0 +1,44 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: Hit testing on element previously hidden by an anonymous scroll box</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1433591"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+/* >+ Create a hidden scrollbox that occupies the whole viewport, then give it >+ visibility: hidden dynamically. The link previously under the scrollbox >+ should be clickable. >+ */ >+.scrollable { >+ position: absolute; >+ top: 0; >+ left: 0; >+ width: 100vw; >+ height: 100vh; >+ overflow: scroll; >+} >+ >+.scrollable .inner { >+ display: table-cell; >+ width: 100vw; >+ height: 100vh; >+} >+</style> >+<div class="scrollable"> >+ <div class="inner"></div> >+</div> >+<a href="#">Should be clickable</a> >+<script> >+test(function() { >+ assert_equals(document.elementFromPoint(10, 10).tagName, "DIV", >+ "Should hit the scrollbox contents"); >+ document.querySelector('div').style.visibility = "hidden"; >+ assert_equals(document.elementFromPoint(10, 10), document.querySelector('a')); >+}, "Link should be clickable after hiding a scrollbox with an anonymous table inside"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-parameters.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-parameters.html >new file mode 100644 >index 0000000000000000000000000000000000000000..899e411bdd302f2995a9d337ac5a3f89bd1c709b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-parameters.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE html> >+<title>Tests that the parameters to document.elementFromPoint() and >+document.elementsFromPoint() are mandatory and of type double.</title> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+function validate_function_parameter_count(testFunc, funcName) { >+ test(function() { >+ assert_throws(new TypeError(), function() { >+ testFunc(); >+ }, "Called with no parameter"); >+ assert_throws(new TypeError(), function() { >+ testFunc(0); >+ }, "Called with 1 parameter"); >+ }, funcName + ": Parameters are mandatory."); >+} >+ >+function validate_function_parameter_type(testFunc, funcName) { >+ test(function() { >+ assert_throws(new TypeError(), function() { >+ testFunc(0, Infinity); >+ }, "Passing Infinity as second parameter throws"); >+ assert_throws(new TypeError(), function() { >+ testFunc(Infinity, 0); >+ }, "Passing Infinity as first parameter throws"); >+ assert_throws(new TypeError(), function() { >+ testFunc(0, NaN); >+ }, "Passing NaN as second parameter throws"); >+ assert_throws(new TypeError(), function() { >+ testFunc(NaN, 0); >+ }, "Passing NaN as first parameter throws"); >+ }, funcName + ": Parameters should be finite floating point values."); >+} >+ >+validate_function_parameter_count(function(x, y) { >+ document.elementFromPoint(x, y); >+}, "document.elementFromPoint"); >+ >+validate_function_parameter_type(function(x, y) { >+ document.elementFromPoint(x, y); >+}, "document.elementFromPoint"); >+ >+validate_function_parameter_count(function(x, y) { >+ document.elementsFromPoint(x, y); >+}, "document.elementsFromPoint"); >+ >+validate_function_parameter_type(function(x, y) { >+ document.elementsFromPoint(x, y); >+}, "document.elementsFromPoint"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint.html >new file mode 100644 >index 0000000000000000000000000000000000000000..33de41e90f6586c28a8d61635f7af2f307d62138 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint.html >@@ -0,0 +1,206 @@ >+<!DOCTYPE html> >+<title>cssom-view - elementFromPoint</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ .size { >+ width:60px; >+ height:60px; >+ } >+ .overlay { >+ position:absolute; >+ top:69px; >+ pointer-events:none; >+ } >+ .purple { >+ background-color: rebeccapurple; >+ } >+ .yellow { >+ background-color: yellow; >+ } >+ .teal { >+ background-color: teal; >+ } >+ .pink { >+ background-color: pink; >+ } >+</style> >+<body> >+ <div id='purple' class="size purple" > </div> >+ <div id='yellow' class="size yellow"> </div> >+ <div id='teal' class="size overlay teal"> </div> >+ <iframe id=iframe-1 src="iframe.html" style='display:none;position:absolute; left:300px;'></iframe> >+ <iframe id=iframe-2 src="iframe.html" width="" height=""></iframe> >+ <iframe id=iframe-3 width="" height=""></iframe> >+ <svg id=squiggle xmlns="http://www.w3.org/2000/svg" height="98" width="500" viewBox="0 0 581 98"> >+ <path stroke-dashoffset="0.00" stroke-dasharray="" d="M62.9 14.9c-25-7.74-56.6 4.8-60.4 24.3-3.73 19.6 21.6 35 39.6 37.6 42.8 6.2 72.9-53.4 116-58.9 65-18.2 191 101 215 28.8 5-16.7-7-49.1-34-44-34 11.5-31 46.5-14 69.3 9.38 12.6 24.2 20.6 39.8 22.9 91.4 9.05 102-98.9 176-86.7 18.8 3.81 33 17.3 36.7 34.6 2.01 10.2.124 21.1-5.18 30.1" stroke="#000" stroke-width="4.3" fill="none"> >+ </path> >+ </svg> >+ <svg id=svg-transform width="180" height="140" >+ xmlns="http://www.w3.org/2000/svg" >+ xmlns:xlink="http://www.w3.org/1999/xlink"> >+ >+ <!-- Now we add a text element and apply rotate and translate to both --> >+ <rect x="50" y="50" height="60" width="60" style="stroke:#000; fill: #0086B2" transform="translate(30) rotate(45 50 50)"></rect> >+ <text x="60" y="105" transform="translate(30) rotate(45 50 50)"> Hello! </text> >+ >+</svg> >+ <div id='pink' class='size pink' style='transform: translate(10px)'> </div> >+ <div id='anotherteal' class='size teal' style='pointer-events:none'>Another teal</div> >+ <img id="dinos" src="/images/blue-area.png" usemap="#dinos_map" border="0" width="364" height="40"/> >+ <map id="dinos_map" name="dinos_map"> >+ <area id="rectG" shape="rect" coords="0,0,90,100" href="#" alt="area 1"/> >+ <area id="circleO" shape="circle" coords="120,60,30" href="#" alt="area 2"/> >+ <area id="polyLE" shape="poly" coords="280,0,310,0,360,30,360,90,280,90" href="#" alt="area 3"/> >+ </map> >+ <!-- Test for fieldsets not doing weird things. Use a 200x200 div to hold >+ all the bits for this test. Also, place it top/right, so it is not below >+ the bottom edge of the viewport. --> >+ <div style="position: absolute; width: 200px; height: 200px; right: 0; top: 0"> >+ <div id="fieldset-div" >+ class="size" style="position: absolute; top: 0; left: 0"> >+ </div> >+ <fieldset id="fieldset" >+ class="size" >+ style="position: absolute; top: 100px; left: 100px; border-radius: 100px"> >+ <!-- Place the child span so the overflow area of the fieldset overlaps >+ the div --> >+ <span style="position: absolute; top: -100px; left: -100px; height: 1px; width: 1px"></span> >+ </fieldset> >+ </div> >+ <script> >+ setup({explicit_done:true}); >+ window.onload = function () { >+ test(function () { >+ assert_equals(document.elementFromPoint(-1, -1), null, >+ "both co-ordinates passed in are negative so should have returned a null"); >+ assert_equals(document.elementFromPoint(-1, -1), null, >+ "x co-ordinates passed in are negative so should have returned a null"); >+ assert_equals(document.elementFromPoint(-1, -1), null, >+ "y co-ordinates passed in are negative so should have returned a null"); >+ }, "Negative co-ordinates"); >+ >+ test(function () { >+ var viewportX = window.innerWidth; >+ var viewportY = window.innerHeight; >+ assert_equals(document.elementFromPoint(viewportX + 100, 10), null, >+ "X co-ordinates larger than viewport"); >+ assert_equals(document.elementFromPoint(10, viewportY + 100), null, >+ "Y co-ordinates larger than viewport"); >+ assert_equals(document.elementFromPoint(viewportX + 100, viewportY + 100), null, >+ "X, Y co-ordinates larger than viewport"); >+ }, "co-ordinates larger than the viewport"); >+ >+ test(function () { >+ var viewportX = window.frames[1].innerWidth; >+ var viewportY = window.frames[1].innerHeight; >+ var iframeRect = document.getElementById('iframe-2').getBoundingClientRect(); >+ assert_equals(null, window.frames[1].document.elementFromPoint(iframeRect.right + viewportX + 100, 10), >+ "X co-ordinates larger than viewport"); >+ assert_equals(null, window.frames[1].document.elementFromPoint(10, iframeRect.bottom + viewportY + 100), >+ "Y co-ordinates larger than viewport"); >+ assert_equals(null, window.frames[1].document.elementFromPoint(iframeRect.right + viewportX + 100, >+ iframeRect.bottom + viewportY + 100), >+ "X, Y co-ordinates larger than viewport"); >+ }, "co-ordinates larger than the viewport from in iframe"); >+ >+ test(function () { >+ assert_equals(document.elementFromPoint(10, 10), document.getElementById('purple'), >+ "Should have returned the element with id `purple`"); >+ }, "Return first element that is the target for hit testing"); >+ >+ test(function () { >+ assert_equals(document.elementFromPoint(10, 80), document.getElementById('yellow'), >+ "Should have returned the element with id `yellow` as element with `teal` has `pointer-events:none`"); >+ }, "First element to get mouse events with pointer-events css"); >+ >+ test(function () { >+ var svg = document.getElementById('squiggle'); >+ svg.scrollIntoView(); >+ var svgRect = svg.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(svgRect.left + Math.round(svgRect.width/2), >+ svgRect.top + Math.round(svgRect.height/2)), >+ svg, >+ "Should have returned the line SVG"); >+ }, "SVG element at x,y"); >+ >+ test(function () { >+ var svg = document.getElementById('svg-transform'); >+ svg.scrollIntoView(); >+ var svgRect = svg.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(svgRect.left + Math.round(svgRect.width/2), >+ svgRect.top + Math.round(svgRect.height/2)), >+ svg.querySelector("rect"), >+ "Should have returned SVG with Hello WPT! that has a transform"); >+ >+ var pink = document.getElementById('pink'); >+ pink.scrollIntoView(); >+ var pinkRect = pink.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(pinkRect.left + Math.round(pinkRect.width/2), >+ pinkRect.top + Math.round(pinkRect.height/2)), >+ pink, >+ "Should have returned pink element that has a transform"); >+ >+ }, "transformed element at x,y"); >+ >+ test(function () { >+ var anotherteal = document.getElementById('anotherteal'); >+ anotherteal.scrollIntoView(); >+ var anothertealRect = anotherteal.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(anothertealRect.left + Math.round(anothertealRect.width/2), >+ anothertealRect.top + Math.round(anothertealRect.height/2)), >+ document.body, >+ "Should have returned the root as it has pointer-events:none"); >+ >+ var doc = frames[2].document; >+ doc.removeChild(doc.documentElement); >+ assert_equals(doc.elementFromPoint(0, 0), null, >+ "Should have returned null as no root element"); >+ }, "no hit target at x,y"); >+ >+ test(function () { >+ var doc = document.implementation.createHTMLDocument('foo'); >+ assert_equals(doc.elementFromPoint(0, 0), null, >+ "Should have returned the documentElement for the document") >+ }, "No viewport available"); >+ >+ test(function () { >+ // HTML says: >+ // Pointing device interaction with an image associated with a set of layered shapes per >+ // the above algorithm must result in the relevant user interaction events being first >+ // fired to the top-most shape covering the point that the pointing device indicated, if >+ // any, or to the image element itself, if there is no shape covering that point. >+ // https://html.spec.whatwg.org/multipage/embedded-content.html#image-map-processing-model >+ var area = document.getElementById('rectG'); >+ var image = document.getElementById('dinos'); >+ area.scrollIntoView(); >+ var areaRect = area.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(areaRect.left + Math.round(areaRect.width/2), >+ areaRect.top + Math.round(areaRect.height/2)), >+ area, >+ "Should have returned the area element"); >+ assert_equals(document.elementFromPoint(areaRect.left + 92, >+ areaRect.top + 2), >+ image, >+ "Should have returned the image element"); >+ }, "Image Maps"); >+ >+ test(function(){ >+ var fieldsetDiv = document.getElementById("fieldset-div"); >+ var divRect = fieldsetDiv.getBoundingClientRect(); >+ assert_equals(document.elementFromPoint(divRect.left + divRect.width/2, >+ divRect.top + divRect.height/2), >+ fieldsetDiv, >+ "The fieldset should not cover up the div it doesn't even overlap"); >+ >+ var fieldset = document.getElementById("fieldset"); >+ var rect = fieldset.getBoundingClientRect(); >+ // A point 5px in from topleft will be outside the rounded border. >+ assert_not_equals(document.elementFromPoint(rect.left + 5, >+ rect.top + 5), >+ fieldset, >+ "The fieldset should not be hit by hit-tests outside its rounded border"); >+ }, "Fieldsets"); >+ done(); >+ } >+ </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPosition.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPosition.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ed86d16b7de85d2b019a6e513df5e04935742932 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPosition.html >@@ -0,0 +1,121 @@ >+<!DOCTYPE HTML> >+<html lang="en-US"> >+<head> >+ <title>CSS Test: CSSOM View elementFromPoint</title> >+ <meta charset="UTF-8"> >+ <link rel="author" title="Chris" href="mailto:pwx.frontend@gmail.com" /> >+ <link rel="help" href="https://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint" /> >+ <meta name="flags" content="dom" /> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> >+</head> >+<body> >+ <noscript>Test not run - JavaScript required!</noscript> >+ <div id="log"></div> >+ <script type="text/javascript"> >+ >+ var body = document.getElementsByTagName( 'body' )[0]; >+ function createElement( id ) { >+ var elem = document.createElement( 'div' ); >+ if ( id && typeof id == 'string' ) { >+ elem.id = id; >+ } >+ body.appendChild( elem ); >+ return elem; >+ } >+ >+ function setPosition( config ) { >+ var target = config.target; >+ target.style.position = 'absolute'; >+ target.style.left = config.left + 'px'; >+ target.style.top = config.top + 'px'; >+ target.style.width = config.width + 'px'; >+ target.style.height = config.height + 'px'; >+ if ( config['z-index'] ) { >+ target.style.zIndex = config['z-index']; >+ } >+ } >+ >+ var target = createElement( 'dom-1' ); >+ setPosition( { >+ width: 100, >+ height: 100, >+ left: 10, >+ top: 10, >+ target: target >+ }); >+ >+ test( function () { >+ assert_inherits( document, 'elementFromPoint' ); >+ }, 'document.elementFromPoint'); >+ >+ test( function () { >+ assert_true( document.elementFromPoint instanceof Function ); >+ }, 'document.elementFromPoint is a Function'); >+ (function(){ >+ var wrap = [ >+ // å·¦ä¸è§. >+ {x: 10, y: 10, r: 'top left corner'}, >+ // ä¸è¾¹çº¿ >+ {x: 50, y: 10, r: 'top line'}, >+ // å³ä¸è§ >+ {x: 110, y: 10, r: 'top right corner'}, >+ // 左边线 >+ {x: 10, y: 50, r: 'left line'}, >+ // å ç´ èå´å >+ {x: 50, y: 50, r: 'inside'}, >+ // å³è¾¹çº¿ >+ {x: 110, y: 50, r: 'right line'}, >+ // å·¦ä¸è§ >+ {x: 10, y: 110, r: 'bottom left corner'}, >+ // ä¸è¾¹çº¿ >+ {x: 50, y: 110, r: 'bottom line'}, >+ // å³ä¸è§ >+ {x: 110, y: 110, r: 'bottom right corner'} >+ ]; >+ var i = 0, len = wrap.length, item; >+ for ( ; i < len; i++ ) { >+ item = wrap[ i ]; >+ test( function () { >+ assert_equals( document.elementFromPoint( item.x, item.y).id == 'dom-1', true ); >+ }, 'test some point of the element: ' + item.r); >+ } >+ })(); >+ test( function () { >+ var elem = document.elementFromPoint( 0, 0 ); >+ assert_true( elem.nodeName == 'HTML' ); >+ }, 'Point (0, 0), return root element(HTML)' ); >+ >+ test( function () { >+ var elem = document.elementFromPoint( -1000, 0 ); >+ assert_true( elem == null, 'negative x, return null' ); >+ }, ' test negative x '); >+ >+ test( function () { >+ var elem = document.elementFromPoint( 0, -1000 ); >+ assert_true( elem == null, 'negative y, return null' ); >+ }, ' test negative y '); >+ >+ test( function () { >+ var elem = document.elementFromPoint( 100000, 0 ); >+ assert_true( elem == null ); >+ }, 'test outside of viewport'); >+ >+ test( function () { >+ var config = { >+ width: 100, >+ height: 100, >+ left: 5, >+ top: 5 >+ }; >+ var target2 = createElement( 'dom-2' ); >+ config.target = target2; >+ setPosition( config ); >+ >+ var elem = document.elementFromPoint( 10, 10 ); >+ var elem2 = document.elementFromPoint( 10, 10 ); >+ assert_equals( elem.id, elem2.id ); >+ }, 'test the top of layer'); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a1a28aab9e53392530df1289d0b3fae126c269f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll-002.html >@@ -0,0 +1,57 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>cssom-view - elementScroll - 002</title> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrolltop"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollleft"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="scroller1" style="height: 100px; width: 100px; overflow: scroll; background: red;"> >+ <div style="background: green; margin-top: 100px; margin-left: 100px; width: 100px; height: 100px;"></div> >+</div> >+<div id="scroller2" style="height: 100px; width: 100px; overflow: hidden; background: red;"> >+ <div style="background: green; margin-top: 100px; padding-left: 100px; width: 100px; height: 100px;"></div> >+</div> >+<div id="scroller3" style="height: 100px; width: 100px; overflow: scroll; background: red;"> >+ <div style="background: green; padding-top: 100px; margin-left: 100px; width: 100px; height: 100px;"></div> >+</div> >+<div id="scroller4" style="height: 100px; width: 100px; overflow: hidden; background: red;"> >+ <div style="background: green; padding-top: 100px; padding-left: 100px; width: 100px; height: 100px;"></div> >+</div> >+<script> >+ test(function () { >+ var scroller1 = document.getElementById("scroller1"); >+ >+ scroller1.scrollTop = 100; >+ scroller1.scrollLeft = 100; >+ assert_equals(scroller1.scrollTop, 100, "changed scrollTop should be 100"); >+ assert_equals(scroller1.scrollLeft, 100, "changed scrollLeft should be 100"); >+ >+ }, "simple scroll with style: 'margin' and 'overflow: scroll'"); >+ test(function () { >+ var scroller2 = document.getElementById("scroller2"); >+ >+ scroller2.scrollTop = 100; >+ scroller2.scrollLeft = 100; >+ assert_equals(scroller2.scrollTop, 100, "changed scrollTop should be 100"); >+ assert_equals(scroller2.scrollLeft, 100, "changed scrollLeft should be 100"); >+ >+ }, "simple scroll with style: 'margin' and 'overflow: hidden'"); >+ test(function () { >+ var scroller3 = document.getElementById("scroller3"); >+ >+ scroller3.scrollTop = 100; >+ scroller3.scrollLeft = 100; >+ assert_equals(scroller3.scrollTop, 100, "changed scrollTop should be 100"); >+ assert_equals(scroller3.scrollLeft, 100, "changed scrollLeft should be 100"); >+ >+ }, "simple scroll with style: 'padding' and 'overflow: scroll'"); >+ test(function () { >+ var scroller4 = document.getElementById("scroller4"); >+ >+ scroller4.scrollTop = 100; >+ scroller4.scrollLeft = 100; >+ assert_equals(scroller4.scrollTop, 100, "changed scrollTop should be 100"); >+ assert_equals(scroller4.scrollLeft, 100, "changed scrollLeft should be 100"); >+ >+ }, "simple scroll with style: 'padding' and 'overflow: hidden'"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2ef76e9d64fa2036dadb26c7a809dab6bfaad1fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll.html >@@ -0,0 +1,173 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>cssom-view - elementScroll</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ #section { >+ width: 300px; >+ height: 500px; >+ /*position: absolute;*/ >+ top: 16px; >+ left: 16px; >+ border: inset gray 3px; >+ overflow: hidden; >+ background: white; >+ } >+ >+ #scrollable { >+ width: 400px; >+ height: 700px; >+ background: linear-gradient(135deg, red, blue); >+ } >+ >+</style> >+ >+<section id="section"> >+ <div id="scrollable"></div> >+ <div id="unrelated"></div> >+</section> >+ >+<script> >+ setup({explicit_done:true}); >+ window.onload = function () { >+ var section = document.getElementById("section"); >+ var unrelated = document.getElementById("unrelated"); >+ >+ test(function () { >+ assert_equals(section.scrollTop, 0, "initial scrollTop should be 0"); >+ assert_equals(section.scrollLeft, 0, "initial scrollLeft should be 0"); >+ >+ section.scrollTop = 30; >+ section.scrollLeft = 40; >+ >+ assert_equals(section.scrollTop, 30, "changed scrollTop should be 40"); >+ assert_equals(section.scrollLeft, 40, "changed scrollLeft should be 40"); >+ assert_equals(unrelated.scrollTop, 0, "unrelated element should not scroll"); >+ assert_equals(unrelated.scrollLeft, 0, "unrelated element should not scroll"); >+ }, "Element scrollTop/Left getter/setter test"); >+ >+ test(function () { >+ section.scroll(50, 60); >+ >+ assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 50"); >+ assert_equals(section.scrollTop, 60, "changed scrollTop should be 60"); >+ }, "Element scroll test (two arguments)"); >+ >+ test(function () { >+ section.scroll({left: 55, top: 65}); >+ >+ assert_equals(section.scrollLeft, 55, "changed scrollLeft should be 55"); >+ assert_equals(section.scrollTop, 65, "changed scrollTop should be 65"); >+ >+ section.scroll({left: 85}); >+ >+ assert_equals(section.scrollLeft, 85, "changed scrollLeft should be 85"); >+ assert_equals(section.scrollTop, 65, "scrollTop should stay at 65"); >+ >+ section.scroll({top: 75}); >+ >+ assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); >+ assert_equals(section.scrollTop, 75, "changed scrollTop should be 75"); >+ >+ section.scroll({}); >+ >+ assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); >+ assert_equals(section.scrollTop, 75, "scrollTop should stay at 75"); >+ >+ section.scroll(); >+ >+ assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85"); >+ assert_equals(section.scrollTop, 75, "scrollTop should stay at 75"); >+ }, "Element scroll test (one argument)"); >+ >+ test(function () { >+ section.scrollTo(80, 70); >+ >+ assert_equals(section.scrollLeft, 80, "changed scrollLeft should be 70"); >+ assert_equals(section.scrollTop, 70, "changed scrollTop should be 80"); >+ }, "Element scrollTo test (two arguments)"); >+ >+ test(function () { >+ section.scrollTo({left: 75, top: 85}); >+ >+ assert_equals(section.scrollLeft, 75, "changed scrollLeft should be 75"); >+ assert_equals(section.scrollTop, 85, "changed scrollTop should be 85"); >+ >+ section.scrollTo({left: 65}); >+ >+ assert_equals(section.scrollLeft, 65, "changed scrollLeft should be 65"); >+ assert_equals(section.scrollTop, 85, "scrollTop should stay at 85"); >+ >+ section.scrollTo({top: 55}); >+ >+ assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65"); >+ assert_equals(section.scrollTop, 55, "changed scrollTop should be 55"); >+ >+ section.scrollTo({}); >+ >+ assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65"); >+ assert_equals(section.scrollTop, 55, "scrollTop should stay at 55"); >+ >+ section.scrollTo(); >+ >+ assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 55"); >+ assert_equals(section.scrollTop, 55, "scrollTop should stay at 55"); >+ }, "Element scrollTo test (one argument)"); >+ >+ test(function () { >+ var left = section.scrollLeft; >+ var top = section.scrollTop; >+ >+ section.scrollBy(10, 20); >+ >+ assert_equals(section.scrollLeft, left + 10, "increment of scrollLeft should be 10") >+ assert_equals(section.scrollTop, top + 20, "increment of scrollTop should be 20") >+ }, "Element scrollBy test (two arguments)"); >+ >+ test(function () { >+ var left = section.scrollLeft; >+ var top = section.scrollTop; >+ >+ section.scrollBy({left: 5, top: 15}); >+ left += 5 >+ top += 15 >+ >+ assert_equals(section.scrollLeft, left, "increment of scrollLeft should be 5") >+ assert_equals(section.scrollTop, top, "increment of scrollTop should be 15") >+ >+ section.scrollBy({left: -15}); >+ left -= 15 >+ >+ assert_equals(section.scrollLeft, left, "decrement of scrollLeft should be 15") >+ assert_equals(section.scrollTop, top, "scrollTop should not be modified") >+ >+ section.scrollBy({top: -5}); >+ top -= 5; >+ >+ assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") >+ assert_equals(section.scrollTop, top, "decrement of scrollTop should be 5") >+ >+ section.scrollBy({}); >+ >+ assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") >+ assert_equals(section.scrollTop, top, "scrollTop should not be modified") >+ >+ section.scrollBy(); >+ >+ assert_equals(section.scrollLeft, left, "scrollLeft should not be modified") >+ assert_equals(section.scrollTop, top, "scrollTop should not be modified") >+ }, "Element scrollBy test (one argument)"); >+ >+ test(function () { >+ section.scrollTop = 1000; >+ section.scrollLeft = 1000; >+ >+ assert_equals(section.scrollTop, 700 - 500, "changed scrollTop should be 200"); >+ assert_equals(section.scrollLeft, 400 - 300, "changed scrollLeft should be 100"); >+ >+ }, "Element scroll maximum test"); >+ >+ done(); >+ }; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-iframes.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-iframes.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3bba161b47d1ff3424b331b69444051af1300d71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-iframes.html >@@ -0,0 +1,83 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<script> >+var loadedFrameCount = 0; >+var t1 = async_test('elementsFromPoint on the root document for points in iframe elements'); >+var t2 = async_test('elementsFromPoint on inner documents'); >+ >+function onFrameLoaded() { >+ loadedFrameCount++; >+ if (loadedFrameCount < 2) >+ return; >+ >+ var body = document.body; >+ var html = document.documentElement; >+ var iframe = document.getElementById('iframe'); >+ var scrollableIframe = document.getElementById('scrollableIframe'); >+ t1.step(function() { >+ checkElementsFromPointFourCorners('document', 'iframe', >+ [iframe, body, html], >+ [iframe, body, html], >+ [iframe, body, html], >+ [scrollableIframe, iframe, body, html]); >+ >+ checkElementsFromPointFourCorners('document', 'scrollableIframe', >+ [scrollableIframe, iframe, body, html], >+ [scrollableIframe, iframe, body, html], >+ [scrollableIframe, iframe, body, html], >+ [scrollableIframe, iframe, body, html]); >+ }); >+ t1.done(); >+ >+ t2.step(function() { >+ var iframeDocument = document.getElementById('iframe').contentDocument; >+ var iframeRoot = iframeDocument.documentElement; >+ var iframeBody = iframeDocument.body; >+ var iframeDiv = iframeDocument.getElementById('div'); >+ checkElementsFromPointFourCorners('document.getElementById(\'iframe\').contentDocument', 'div', >+ [iframeDiv, iframeBody, iframeRoot], >+ [iframeDiv, iframeBody, iframeRoot], >+ [iframeDiv, iframeBody, iframeRoot], >+ [iframeDiv, iframeBody, iframeRoot]); >+ >+ var iframeDocument2 = document.getElementById('scrollableIframe').contentDocument; >+ var iframeRoot2 = iframeDocument2.documentElement; >+ var iframeBody2 = iframeDocument2.body; >+ var iframeSmallDiv = iframeDocument2.getElementById('small'); >+ var iframeBigDiv = iframeDocument2.getElementById('big'); >+ checkElementsFromPointFourCorners('document.getElementById(\'scrollableIframe\').contentDocument', 'big', >+ [iframeSmallDiv, iframeBigDiv, iframeBody2, iframeRoot2], >+ [iframeBigDiv, iframeBody2, iframeRoot2], >+ [], >+ []); >+ }); >+ t2.done(); >+} >+</script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+body { >+ height: 500px; >+} >+#iframe { >+ width: 200px; >+ height: 200px; >+} >+#scrollableIframe { >+ position: absolute; >+ top: 0; >+ left: 0; >+ transform: translate(50px, 50px); >+ width: 150px; >+ height: 150px; >+ overflow-y: scroll; >+ overflow-x: scroll; >+} >+</style> >+<iframe id="iframe" src="resources/iframe1.html"></iframe> >+<iframe id="scrollableIframe" src="resources/iframe2.html"></iframe> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-invalid-cases.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-invalid-cases.html >new file mode 100644 >index 0000000000000000000000000000000000000000..369cffcd31ad9ef8a2946a9974f4030a5798bfed >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-invalid-cases.html >@@ -0,0 +1,56 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html { >+ overflow-y: scroll; >+ overflow-x: scroll; >+} >+html, body { >+ margin: 0; >+ padding: 0; >+} >+body { >+ width: 100%; >+ height: 100%; >+} >+#simpleDiv { >+ width: 200px; >+ height: 200px; >+ background-color: rgba(0,255,0,0.5); >+} >+#beyondTopLeft { >+ position: absolute; >+ transform: translate3d(-100px, -100px, 10px); >+ left: 0; >+ top: 0; >+ width: 100px; >+ height: 100px; >+ background-color: rgba(0,0,0,0.1); >+} >+</style> >+<body> >+<div id="beyondTopLeft"></div> >+<div id="simpleDiv"></div> >+<script> >+test(function() { >+ assertElementsFromPoint('document', 300, 300, [document.documentElement]); >+}, "The root element is the last element returned for otherwise empty queries within the viewport"); >+ >+test(function() { >+ var simpleDiv = document.getElementById('simpleDiv'); >+ var simpleRect = simpleDiv.getBoundingClientRect(); >+ var simpleCoords = (simpleRect.right - 1) + ', ' + (simpleRect.bottom - 1); >+ assertElementsFromPoint('document', simpleRect.right - 1, simpleRect.bottom - 1, >+ [simpleDiv, document.body, document.documentElement]); >+}, "The root element is the last element returned for valid queries"); >+ >+test(function() { >+ assertElementsFromPoint('document', window.innerWidth + 1, window.innerHeight + 1, []); >+ assertElementsFromPoint('document', -1, -1, []); >+ assertElementsFromPoint('document', 1, -1, []); >+ assertElementsFromPoint('document', -1, 1, []); >+}, "An empty sequence is returned for queries outside the viewport"); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-shadowroot.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-shadowroot.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b3e0c6db269f468be4185618ffd6c4f32beae83d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-shadowroot.html >@@ -0,0 +1,87 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+body { >+ height: 500px; >+} >+</style> >+<body> >+<div id="host"></div> >+<div id="blockHost"></div> >+<span id="inlineBlockHost" style="display:inline-block;"></span> >+<input type="submit" id="submit"> >+<script> >+function assertElementsFromPoint(doc, x, y, expected) { >+ var query = doc + '.elementsFromPoint(' + x + ',' + y + ')'; >+ var sequence = eval(query); >+ assert_equals(nodeListToString(sequence), nodeListToString(expected), query); >+} >+ >+function createBox(id) { >+ var div = document.createElement('div'); >+ div.id = id; >+ div.style.width = '100px'; >+ div.style.height = '10px'; >+ return div; >+} >+ >+function centerX(element) { >+ return element.offsetLeft + element.offsetWidth / 2; >+} >+ >+function centerY(element) { >+ return element.offsetTop + element.offsetHeight / 2; >+} >+ >+var shadowRoot = host.attachShadow({mode: 'closed'}); >+var box11 = createBox('box11'); >+var box12 = createBox('box12'); >+var box13 = createBox('box13'); >+shadowRoot.appendChild(box11); >+shadowRoot.appendChild(box12); >+shadowRoot.appendChild(box13); >+ >+var nestedHost = document.createElement('div'); >+var nestedShadowRoot = nestedHost.attachShadow({mode: 'closed'}); >+var box21 = createBox('box21'); >+var box22 = createBox('box22'); >+var box23 = createBox('box23'); >+nestedShadowRoot.appendChild(box21); >+nestedShadowRoot.appendChild(box22); >+nestedShadowRoot.appendChild(box23); >+ >+shadowRoot.appendChild(nestedHost); >+ >+var x12 = centerX(box12); >+var y12 = centerY(box12); >+var x22 = centerX(box22); >+var y22 = centerY(box22); >+ >+var root3 = blockHost.attachShadow({mode: 'closed'}); >+root3.appendChild(document.createTextNode('text1')); >+var root4 = inlineBlockHost.attachShadow({mode: 'closed'}); >+root4.appendChild(document.createTextNode('text2')); >+ >+test(function() { >+ assertElementsFromPoint('document', x22, y22, [host, document.body, document.documentElement]); >+ assertElementsFromPoint('document', centerX(blockHost), centerY(blockHost), >+ [blockHost, document.body, document.documentElement]); >+ assertElementsFromPoint('document', centerX(inlineBlockHost), centerY(inlineBlockHost), >+ [inlineBlockHost, document.body, document.documentElement]); >+ assertElementsFromPoint('document', centerX(submit), centerY(submit), >+ [submit, document.body, document.documentElement]); >+}, 'elementsFromPoint on the document root should not return elements in shadow trees'); >+ >+test(function() { >+ assert_not_equals(shadowRoot.elementsFromPoint(x12, y12).indexOf(box12), -1); >+ assert_not_equals(shadowRoot.elementsFromPoint(x22, y22).indexOf(nestedHost), -1); >+ assert_not_equals(nestedShadowRoot.elementsFromPoint(x22, y22).indexOf(box22), -1); >+}, 'elementsFromPoint on a shadow root should include elements in that shadow tree'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-simple.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-simple.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4973121d7db5ad4b36d4eaac0446186f7cbe5fbc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-simple.html >@@ -0,0 +1,131 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+body { >+ height: 500px; >+} >+#simpleDiv { >+ width: 200px; >+ height: 200px; >+ background-color: rgba(0,0,255,0.5); >+} >+#divWithPseudo { >+ position: absolute; >+ left: 50px; >+ top: 50px; >+ width: 100px; >+ height: 100px; >+ background-color: rgba(255,0,0,0.5); >+} >+#divWithPseudo::before { >+ position: absolute; >+ left: 20px; >+ top: 20px; >+ width: 100px; >+ height: 100px; >+ content: "::before"; >+ background-color: rgba(255,0,0,0.5); >+ z-index: 9999; >+} >+#divBetweenPseudo { >+ position: absolute; >+ left: 100px; >+ top: 100px; >+ width: 100px; >+ height: 100px; >+ background-color: rgba(0,255,0,0.5); >+} >+#withMargin { >+ margin-top: -15px; >+ width: 200px; >+ height: 200px; >+ background-color: rgba(0,0,0,0.5); >+} >+#inlineSpan { >+ float: right; >+ background-color: yellow; >+ width: 100px; >+ height: 1em; >+} >+#noPointerEvents { >+ position: absolute; >+ left: 50px; >+ top: 50px; >+ width: 100px; >+ height: 300px; >+ background-color: rgba(0,0,0,0.1); >+ pointer-events: none; >+} >+#threeD { >+ position: absolute; >+ transform: translate3d(-100px, -100px, 10px); >+ left: 140px; >+ top: 140px; >+ width: 200px; >+ height: 50px; >+ background-color: rgba(255,255,255,0.5); >+} >+</style> >+<div id="simpleDiv"></div> >+<div id="divWithPseudo"></div> >+<div id="divBetweenPseudo"></div> >+<div id="withMargin"><span id="inlineSpan"></span></div> >+<div id="noPointerEvents"></div> >+<div id="threeD"></div> >+<script> >+var body = document.body; >+var html = document.documentElement; >+test(function() { >+ checkElementsFromPointFourCorners('document', 'simpleDiv', >+ [simpleDiv, body, html], >+ [simpleDiv, body, html], >+ [withMargin, simpleDiv, body, html], >+ [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html]); >+}, "elementsFromPoint for each corner of a simple div"); >+ >+test(function() { >+ checkElementsFromPointFourCorners('document', 'divWithPseudo', >+ [threeD, divWithPseudo, simpleDiv, body, html], >+ [threeD, divWithPseudo, simpleDiv, body, html], >+ [divWithPseudo, simpleDiv, body, html], >+ [divWithPseudo, divBetweenPseudo, divWithPseudo, simpleDiv, body, html]); >+}, "elementsFromPoint for each corner of a div that has a pseudo-element"); >+ >+test(function() { >+ checkElementsFromPointFourCorners('document', 'divBetweenPseudo', >+ [divWithPseudo, divBetweenPseudo, divWithPseudo, simpleDiv, body, html], >+ [divBetweenPseudo, simpleDiv, body, html], >+ [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html], >+ [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html]); >+}, "elementsFromPoint for each corner of a div that is between another div and its pseudo-element"); >+ >+test(function() { >+ checkElementsFromPointFourCorners('document', 'withMargin', >+ [withMargin, simpleDiv, body, html], >+ [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html], >+ [withMargin, body, html], >+ [withMargin, body, html]); >+}, "elementsFromPoint for each corner of a div that has a margin"); >+ >+test(function() { >+ checkElementsFromPointFourCorners('document', 'noPointerEvents', >+ [threeD, divWithPseudo, simpleDiv, body, html], >+ [threeD, divWithPseudo, simpleDiv, body, html], >+ [withMargin, body, html], >+ [withMargin, body, html]); >+}, "elementsFromPoint for each corner of a div with pointer-events:none"); >+ >+test(function() { >+ checkElementsFromPointFourCorners('document', 'threeD', >+ [threeD, simpleDiv, body, html], >+ [threeD, body, html], >+ [threeD, simpleDiv, body, html], >+ [threeD, body, html]); >+}, "elementsFromPoint for each corner of a div with a 3d transform"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8bbc23eb2178e1275338943c3127405e9011de90 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE HTML> >+<title>Document.prototype.elementsFromPoint on SVG text content elements</title> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-elementsfrompoint"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+#svg { >+ margin: 100px; >+ background-color: rgba(0,180,0,0.2); >+} >+text { >+ font-size: 50px; >+} >+</style> >+<div id='sandbox'> >+ <svg id='svg' width='300' height='300'> >+ <defs> >+ <path id="path" d="M10,170h1000"/> >+ </defs> >+ <text id="text1" x="10" y="50">Some text</text> >+ <text id="text2" x="10" y="110"><tspan id="tspan1">Some text</tspan></text> >+ <text id="text3"><textPath id="textpath1" xlink:href="#path">Some text</textpath></text> >+ <text id="text4" x="10" y="230">Text under<tspan id="tspan2" x="10">Text over</tspan></text> >+ </svg> >+</div> >+<script> >+test(function() { >+ assertElementsFromPoint('document', 125, 125, >+ [text1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside a <text>'); >+ >+test(function() { >+ assertElementsFromPoint('document', 125, 185, >+ [tspan1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside a <tspan> nested in a <text> without content'); >+ >+test(function() { >+ assertElementsFromPoint('document', 125, 245, >+ [textpath1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside a <textPath> nested in a <text> without content'); >+ >+test(function() { >+ assertElementsFromPoint('document', 125, 305, >+ [tspan2, text4, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside an overlapping <tspan> nested in a <text>'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8535228ababb0cf5f271b0d3cc01c3c4d7106a61 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg.html >@@ -0,0 +1,67 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+#svg { >+ margin: 100px; >+ background-color: rgba(0,180,0,0.2); >+} >+rect { >+ fill: rgba(180,0,0,0.2); >+} >+#topLeftRect2NoHitTest { >+ pointer-events: none; >+} >+</style> >+<div id='sandbox'> >+ <svg id='svg' width='300' height='300'> >+ <rect id='topLeftRect1' x='5' y='5' width='90' height='90'/> >+ <rect id='topLeftRect2NoHitTest' x='10' y='10' width='80' height='80'/> >+ <rect id='topLeftRect3' x='15' y='15' width='70' height='70'/> >+ >+ <g id='middleG1'> >+ <g id='middleG2'> >+ <rect id='middleRect1' x='105' y='105' width='90' height='90'/> >+ <rect id='middleRect2' x='110' y='110' width='80' height='80'/> >+ </g> >+ </g> >+ >+ <g id='bottomLeftG'> >+ <image id='bottomLeftImage1' x='5' y='205' width='90' height='90' xlink:href='data:image/svg+xml;utf8,<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="rgba(180,0,0,0.2)"/></svg>'/> >+ <image id='bottomLeftImage2' x='10' y='210' width='80' height='80' xlink:href='data:image/svg+xml;utf8,<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="rgba(180,0,0,0.2)"/></svg>'/> >+ </g> >+ >+ <g id='bottomRightG1' transform='translate(300, 300)'> >+ <g id='bottomRightG2' transform='translate(-100, -100)'> >+ <rect id='bottomRightRect1' x='5' y='5' width='90' height='90'/> >+ <rect id='bottomRightRect2' x='110' y='110' width='80' height='80' transform='translate(-100, -100)'/> >+ </g> >+ </g> >+ </svg> >+</div> >+<script> >+test(function() { >+ assertElementsFromPoint('document', 125, 125, >+ [topLeftRect3, topLeftRect1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside two rects'); >+ >+test(function() { >+ assertElementsFromPoint('document', 225, 225, >+ [middleRect2, middleRect1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside two rects that are inside a <g>'); >+ >+test(function() { >+ assertElementsFromPoint('document', 125, 325, >+ [bottomLeftImage2, bottomLeftImage1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside two images'); >+ >+test(function() { >+ assertElementsFromPoint('document', 325, 325, >+ [bottomRightRect2, bottomRightRect1, svg, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for a point inside transformed rects and <g>'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-table.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-table.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9ecb614b6665bbaef61eab80226e521a0c18eb10 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-table.html >@@ -0,0 +1,99 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/elementsFromPoint.js"></script> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+#testtable { >+ margin: 100px; >+ width: 200px; >+ height: 200px; >+ background-color: rgba(0,180,0,0.2); >+} >+#testtable tr { >+ background-color: rgba(180,0,0,0.2); >+} >+#testtable td { >+ background-color: rgba(0,0,180,0.2); >+} >+.rtl { >+ direction: rtl; >+} >+.tblr { >+ writing-mode: vertical-lr; >+} >+</style> >+<div id='sandbox'> >+ <table id='testtable'> >+ <tr id='tr1'> >+ <td id='td11'></td> >+ <td id='td12'></td> >+ <td id='td13'></td> >+ <td id='td14'></td> >+ </tr> >+ <tr id='tr2'> >+ <td id='td21'></td> >+ <td id='td22'></td> >+ <td id='td23'></td> >+ <td id='td24'></td> >+ </tr> >+ <tr id='tr3'> >+ <td id='td31'></td> >+ <td id='td32'></td> >+ <td id='td33'></td> >+ <td id='td34'></td> >+ </tr> >+ <tr id='tr4'> >+ <td id='td41'></td> >+ <td id='td42'></td> >+ <td id='td43'></td> >+ <td id='td44'></td> >+ </tr> >+ </table> >+</div> >+<script> >+test(function() { >+ assertElementsFromPoint('document', 125, 125, >+ [td11, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 275, 125, >+ [td14, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 175, 175, >+ [td22, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 125, 275, >+ [td41, testtable, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for points inside table cells'); >+ >+test(function() { >+ assertElementsFromPoint('document', 100, 100, >+ [testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 199, 199, >+ [testtable, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for points between table cells'); >+ >+testtable.setAttribute('class', 'rtl'); >+test(function() { >+ assertElementsFromPoint('document', 125, 125, >+ [td14, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 275, 125, >+ [td11, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 100, 100, >+ [testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 199, 199, >+ [testtable, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for points inside cells in a right-to-left table'); >+ >+testtable.setAttribute('class', 'tblr'); >+test(function() { >+ assertElementsFromPoint('document', 125, 275, >+ [td14, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 275, 125, >+ [td41, testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 100, 100, >+ [testtable, sandbox, document.body, document.documentElement]); >+ assertElementsFromPoint('document', 199, 199, >+ [testtable, sandbox, document.body, document.documentElement]); >+}, 'elementsFromPoint for points inside cells in a flipped (writing-mode:vertical-lr) table'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c48f321c8179a6698ebcfd7b097a90412a9c79ed >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint.html >@@ -0,0 +1,150 @@ >+<!DOCTYPE html> >+<title>cssom-view - elementsFromPoint</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ .size { >+ width:60px; >+ height:60px; >+ } >+ .overlay { >+ position:absolute; >+ top:69px; >+ pointer-events:none; >+ } >+ .purple { >+ background-color: rebeccapurple; >+ } >+ .yellow { >+ background-color: yellow; >+ } >+ .teal { >+ background-color: teal; >+ } >+ .pink { >+ background-color: pink; >+ } >+</style> >+<body> >+ <div id='purple' class="size purple" > </div> >+ <div id='yellow' class="size yellow"> </div> >+ <div id='teal' class="size overlay teal"> </div> >+ <iframe id=iframe-1 src="iframe.html" style='display:none;position:absolute; left:300px;'></iframe> >+ <iframe id=iframe-2 src="iframe.html" width="" height=""></iframe> >+ <iframe id=iframe-3 width="" height=""></iframe> >+ <svg id=squiggle xmlns="http://www.w3.org/2000/svg" height="98" width="500" viewBox="0 0 581 98"> >+ <path stroke-dashoffset="0.00" stroke-dasharray="" d="M62.9 14.9c-25-7.74-56.6 4.8-60.4 24.3-3.73 19.6 21.6 35 39.6 37.6 42.8 6.2 72.9-53.4 116-58.9 65-18.2 191 101 215 28.8 5-16.7-7-49.1-34-44-34 11.5-31 46.5-14 69.3 9.38 12.6 24.2 20.6 39.8 22.9 91.4 9.05 102-98.9 176-86.7 18.8 3.81 33 17.3 36.7 34.6 2.01 10.2.124 21.1-5.18 30.1" stroke="#000" stroke-width="4.3" fill="none"> >+ </path> >+ </svg> >+ <svg id=svg-transform width="180" height="140" >+ xmlns="http://www.w3.org/2000/svg" >+ xmlns:xlink="http://www.w3.org/1999/xlink"> >+ >+ <!-- Now we add a text element and apply rotate and translate to both --> >+ <rect x="50" y="50" height="60" width="60" style="stroke:#000; fill: #0086B2" transform="translate(30) rotate(45 50 50)"></rect> >+ <text x="60" y="105" transform="translate(30) rotate(45 50 50)"> Hello! </text> >+ >+</svg> >+ <div id='pink' class='size pink' style='transform: translate(10px)'> </div> >+ <div id='anotherteal' class='size teal' style='pointer-events:none'>Another teal</div> >+ <script> >+ setup({explicit_done:true}); >+ window.onload = function () { >+ test(function () { >+ assert_array_equals(document.elementsFromPoint(-1, -1), [], >+ "both co-ordinates passed in are negative so should have returned a []"); >+ assert_array_equals(document.elementsFromPoint(-1, -1), [], >+ "x co-ordinates passed in are negative so should have returned a []"); >+ assert_array_equals(document.elementsFromPoint(-1, -1), [], >+ "y co-ordinates passed in are negative so should have returned a []"); >+ }, "Negative co-ordinates"); >+ >+ test(function () { >+ var viewportX = window.innerWidth; >+ var viewportY = window.innerHeight; >+ assert_array_equals(document.elementsFromPoint(viewportX + 100, 10), [], >+ "X co-ordinates larger than viewport so should have returned a []"); >+ assert_array_equals(document.elementsFromPoint(10, viewportY + 100), [], >+ "Y co-ordinates larger than viewport so should have returned a []"); >+ assert_array_equals(document.elementsFromPoint(viewportX + 100, viewportY + 100), [], >+ "X, Y co-ordinates larger than viewport so should have returned a []"); >+ }, "co-ordinates larger than the viewport"); >+ >+ test(function () { >+ var viewportX = window.frames[1].innerWidth; >+ var viewportY = window.frames[1].innerHeight; >+ var iframeRect = document.getElementById('iframe-2').getBoundingClientRect(); >+ assert_array_equals([], window.frames[1].document.elementsFromPoint(iframeRect.right + viewportX + 100, 10), >+ "X co-ordinates larger than viewport so should have returned a []"); >+ assert_array_equals([], window.frames[1].document.elementsFromPoint(10, iframeRect.bottom + viewportY + 100), >+ "Y co-ordinates larger than viewport so should have returned a []"); >+ assert_array_equals([], window.frames[1].document.elementsFromPoint(iframeRect.right + viewportX + 100, >+ iframeRect.bottom + viewportY + 100), >+ "X, Y co-ordinates larger than viewport so should have returned a []"); >+ }, "co-ordinates larger than the viewport from in iframe"); >+ >+ test(function () { >+ assert_array_equals(document.elementsFromPoint(10, 10), >+ [document.getElementById('purple'), document.body, document.querySelector('html')], >+ "Should have returned a sequence with `[purple element, document.body, html]`"); >+ }, "Return first element that is the target for hit testing"); >+ >+ test(function () { >+ assert_array_equals(document.elementsFromPoint(10, 80), >+ [document.getElementById('yellow'), document.body, document.querySelector('html')], >+ "Should have returned a sequence with `[yellow element, document.body, html]`"); >+ }, "First element to get mouse events with pointer-events css"); >+ >+ test(function () { >+ var svg = document.getElementById('squiggle'); >+ var svgRect = svg.getBoundingClientRect(); >+ assert_array_equals(document.elementsFromPoint(svgRect.left + Math.round(svgRect.width/2), >+ svgRect.top + Math.round(svgRect.height/2)), >+ [svg, document.body, document.querySelector('html')], >+ "Should have returned a sequence with [svg, body, html]"); >+ }, "SVG element at x,y"); >+ >+ test(function () { >+ var svg = document.getElementById('svg-transform'); >+ var svgRect = svg.getBoundingClientRect(); >+ assert_array_equals(document.elementsFromPoint(svgRect.left + Math.round(svgRect.width/2), >+ svgRect.top + Math.round(svgRect.height/2)), >+ [svg.querySelector("rect"), svg, document.body, document.querySelector('html')], >+ "Should have returned [svg rect, svg, body, html]"); >+ >+ var pink = document.getElementById('pink'); >+ var pinkRect = pink.getBoundingClientRect(); >+ assert_array_equals(document.elementsFromPoint(pinkRect.left + Math.round(pinkRect.width/2), >+ pinkRect.top + Math.round(pinkRect.height/2)), >+ [pink, document.body, document.querySelector('html')], >+ "Should have returned a sequence with [pink, body, html]"); >+ >+ }, "transformed element at x,y"); >+ >+ test(function () { >+ var anotherteal = document.getElementById('anotherteal'); >+ var anothertealRect = anotherteal.getBoundingClientRect(); >+ assert_array_equals(document.elementsFromPoint(anothertealRect.left + Math.round(anothertealRect.width/2), >+ anothertealRect.top + Math.round(anothertealRect.height/2)), >+ [document.body, document.querySelector('html')], >+ "Should have returned the sequence [body, html]"); >+ >+ var doc = frames[1].document; >+ assert_array_equals([doc.querySelector('html')], doc.elementsFromPoint(0, 100), >+ "Should have returned the sequence [html]") >+ >+ var doc = frames[2].document; >+ doc.removeChild(doc.documentElement); >+ assert_array_equals(doc.elementsFromPoint(0, 0), [], >+ "Should have returned [] as no root element"); >+ >+ }, "no hit target at x,y"); >+ >+ test(function () { >+ var doc = document.implementation.createHTMLDocument('foo'); >+ assert_array_equals(doc.elementsFromPoint(0, 0), [], >+ "Should have returned []") >+ }, "No viewport available"); >+ done(); >+ } >+ </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/historical.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/historical.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bf82eac1157aea5fa256861ef04f8da15e6ae89e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/historical.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>Historical features</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+test(function() { >+ assert_false("ClientRectList" in self); >+}, "Support for ClientRectList"); >+ >+test(function() { >+ assert_false("ClientRect" in self); >+}, "Support for ClientRect"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/htmlelement-offset-width-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/htmlelement-offset-width-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9171997e2a9c59df4e4c1aaad58079593d496cf1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/htmlelement-offset-width-001.html >@@ -0,0 +1,29 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 7 - element.offsetWidth detatches correctly</title> >+ <link rel="author" title="Michael Howell" href="mailto:michael@notriddle.com"> >+ <link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-htmlelement-offsetwidth"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="element.offsetWidth returns 0 when there is no documentElement."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="myDiv">...</div> >+ <div id="log"></div> >+ <script> >+ test(function() { >+ // These asserts need to be in this order to trigger a bug in Servo. >+ var el = document.createElement("div"); >+ el.appendChild(document.createTextNode("...")); >+ assert_equals(el.offsetWidth, 0, "new element has offset width not equal to zero"); >+ assert_not_equals(document.getElementById("myDiv"), 0, "element with content has offset width equal to zero"); >+ var html = document.removeChild(document.documentElement); >+ // Put back the root element, so that testharnessreport.js can append the result. >+ this.add_cleanup(function() { document.appendChild(html); }); >+ assert_equals(el.offsetWidth, 0, "new element has offset width not equal to zero after removing documentElement"); >+ }); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/iframe.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/iframe.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e4413a7388a7a0463264a002985ef2525ec6034b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/iframe.html >@@ -0,0 +1,4 @@ >+<!DOCTYPE html> >+<style> >+ html, body { padding:9px; border:1px solid } >+</style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/interfaces.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fa1739d557962d4a90942c40c5f72d2a3bb87edf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/interfaces.html >@@ -0,0 +1,73 @@ >+<!doctype html> >+<meta charset=utf-8> >+<!-- WARNING: These tests are preliminary and probably partly incorrect. --> >+<title>CSSOM View automated IDL tests</title> >+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view-1/#idl-index"> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src=/resources/WebIDLParser.js></script> >+<script src=/resources/idlharness.js></script> >+ >+<input id="caretPositionInput" style="position: absolute; top: 0; left: 0; border: 0;"> >+ >+<h1>CSSOM View IDL tests</h1> >+<div id=log></div> >+ >+<script> >+"use strict"; >+ >+function doTest([html, dom, uievents, cssom, cssom_view]) { >+ >+ var idlArray = new IdlArray(); >+ var svg = "interface SVGElement : Element {};"; >+ idlArray.add_untested_idls(html + dom + svg + cssom); >+ idlArray.add_untested_idls(uievents, { only: [ >+ 'UIEvent', >+ 'UIEventInit', >+ 'MouseEvent', >+ 'MouseEventInit', >+ 'EventModifierInit'] >+ }); >+ idlArray.add_idls(cssom_view); >+ >+ idlArray.add_objects({ >+ "Window": ["window"], >+ "MediaQueryList": ["matchMedia('all')"], >+ "MediaQueryListEvent": ["new MediaQueryListEvent('change')"], >+ "Screen": ["screen"], >+ "Document": ["document"], >+ "CaretPosition": ["document.caretPositionFromPoint(5, 5)"], >+ "Element": ["document.createElementNS('x', 'y')"], >+ "HTMLElement": ["document.createElement('div')"], >+ "HTMLImageElement": ["document.createElement('img')"], >+ "Range": ["new Range()"], >+ // "MouseEvent": ["new MouseEvent('foo')"], >+ "Text": ["document.createTextNode('x')"], >+ // "CSSPseudoElement": [], >+ }); >+ idlArray.test(); >+}; >+ >+function fetchData(url) { >+ return fetch(url).then((response) => response.text()); >+} >+ >+function waitForLoad() { >+ return new Promise(function(resolve) { >+ addEventListener("load", resolve); >+ }); >+} >+ >+promise_test(function() { >+ // Have to wait for onload >+ return Promise.all([fetchData("/interfaces/html.idl"), >+ fetchData("/interfaces/dom.idl"), >+ fetchData("/interfaces/uievents.idl"), >+ fetchData("/interfaces/cssom.idl"), >+ fetchData("/interfaces/cssom-view.idl"), >+ waitForLoad()]) >+ .then(doTest); >+}, "Test driver"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMedia.xht b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMedia.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..7ac875c6aa967187d8171f0876a5de15adfe5249 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMedia.xht >@@ -0,0 +1,187 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: CSSOM View matchMedia and MediaQueryList</title> >+ <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-window-matchmedia" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-1/#serializing-media-queries" /> >+ <meta name="flags" content="dom" /> >+ <script src="/resources/testharness.js" type="text/javascript" /> >+ <script src="/resources/testharnessreport.js" type="text/javascript" /> >+ <style type="text/css"><![CDATA[ >+ iframe { border: none; } >+ ]]></style> >+ </head> >+ <body> >+ <noscript>Test not run - javascript required.</noscript> >+ <div id="log" /> >+ <iframe width="200" height="100" /> >+ <script type="text/javascript"><![CDATA[ >+ function reflow(doc) { >+ doc.body.offsetWidth; >+ } >+ >+ var iframe = document.querySelector("iframe"); >+ var iframe_window = window.frames[0]; >+ >+ reflow(iframe_window.document); >+ >+ test(function(){ >+ assert_inherits(window, "matchMedia"); >+ }, "window.matchMedia exists"); >+ >+ test(function(){ >+ assert_true(window.matchMedia instanceof Function, "FATAL ERROR: The window.matchMedia function is not present. The rest of the testsuite will fail to run."); >+ }, "window.matchMedia is a Function"); >+ >+ var mql, mql1, mql2, mql3; >+ >+ test(function(){ >+ mql = window.matchMedia("all"); >+ assert_true(mql instanceof MediaQueryList, "matchMedia(\"all\") returned MediaQueryList object."); >+ }, "window.matchMedia(\"all\")"); >+ >+ test(function(){ >+ assert_idl_attribute(mql, "media", "Check that MediaQueryList.media exists."); >+ }, "MediaQueryList.media exists"); >+ >+ test(function(){ >+ assert_readonly(mql, "media", "Check that MediaQueryList.media is readonly."); >+ }, "MediaQueryList.media is readonly"); >+ >+ test(function(){ >+ assert_equals(mql.media, "all"); >+ }, "MediaQueryList.media for \"all\""); >+ >+ test(function(){ >+ assert_idl_attribute(mql, "matches", "Check that MediaQueryList.matches exists."); >+ }, "MediaQueryList.matches exists"); >+ >+ test(function(){ >+ assert_readonly(mql, "matches", "Check that MediaQueryList.matches is readonly."); >+ }, "MediaQueryList.matches is readonly"); >+ >+ test(function(){ >+ assert_true(mql.matches); >+ }, "MediaQueryList.matches for \"all\""); >+ >+ test(function(){ >+ assert_inherits(mql, "addListener"); >+ }, "MediaQueryList.addListener exists"); >+ >+ test(function(){ >+ assert_true(mql.addListener instanceof Function); >+ }, "MediaQueryList.addListener is a Function"); >+ >+ test(function(){ >+ assert_inherits(mql, "removeListener"); >+ }, "MediaQueryList.removeListener exists"); >+ >+ test(function(){ >+ assert_true(mql.removeListener instanceof Function); >+ }, "MediaQueryList.removeListener is a Function"); >+ >+ test(function(){ >+ mql = window.matchMedia("::"); >+ assert_true(mql instanceof MediaQueryList, "window.matchMedia(\"::\") returned MediaQueryList object."); >+ assert_equals(mql.media, "not all", "MediaQueryList.media serialized as \"not all\" from original string with syntax error."); >+ }, "MediaQueryList.media syntax error"); >+ >+ test(function(){ >+ assert_false(mql.matches); >+ }, "MediaQueryList.matches for \"not all\""); >+ >+ test(function(){ >+ mql = iframe_window.matchMedia("(max-width: 199px), all and (min-width: 200px)"); >+ assert_equals(mql.media, "(max-width: 199px), (min-width: 200px)"); >+ assert_true(mql.matches); >+ }, "MediaQueryList.matches for \"(max-width: 199px), all and (min-width: 200px)\"") >+ >+ test(function(){ >+ mql = iframe_window.matchMedia("(min-aspect-ratio: 1/1)"); >+ assert_true(mql.matches); >+ }, "MediaQueryList.matches for \"(min-aspect-ratio: 1/1)\""); >+ >+ test(function(){ >+ mql = iframe_window.matchMedia("(width: 200px)"); >+ assert_true(mql.matches); >+ }, "MediaQueryList.matches for \"(width: 200px)\""); >+ >+ test(function(){ >+ mql1 = iframe_window.matchMedia("(max-height: 50px)"); >+ assert_false(mql1.matches); >+ }, "MediaQueryList.matches for \"(max-height: 50px)\""); >+ >+ test(function(){ >+ mql2 = iframe_window.matchMedia("(min-width: 150px)"); >+ assert_true(mql2.matches); >+ }, "MediaQueryList.matches for \"(min-width: 150px)\""); >+ >+ var resizeTest = async_test("Resize iframe from 200x100 to 200x50, then to 100x50"); >+ var listenerOrderTest = async_test("Listeners are called in the order which they have been added"); >+ var duplicateListenerTest = async_test("Listener added twice is only called once."); >+ >+ window.onload = function(){ >+ >+ var rmListener = function(x){ >+ resizeTest.step(function(){ >+ assert_unreached("removeListener was not successful."); >+ }); >+ }; >+ >+ var dupListener = function(x){ >+ duplicateListenerTest.step(function(){ >+ assert_false(mql1.dupListenerCalled, "Check that this listener has not been called before."); >+ mql1.dupListenerCalled = true; >+ }); >+ }; >+ >+ mql1.firstListenerCalled = false; >+ mql1.dupListenerCalled = false; >+ // Add listener twice and remove it below. Should not be called. >+ mql1.addListener(rmListener); >+ mql1.addListener(rmListener); >+ // Add listener twice. Should only be called once. >+ mql1.addListener(dupListener); >+ mql1.addListener(dupListener); >+ >+ mql1.addListener(function(x){ >+ resizeTest.step(function(){ >+ assert_equals(x, mql1, "Check that the MediaQueryList passed to the handler is the same that addListener was invoked on."); >+ assert_true(x.matches, "(max-height: 50px) should now pass."); >+ assert_true(mql2.matches, "(min-width: 150px) should still pass."); >+ iframe.width = "100"; >+ }); >+ >+ listenerOrderTest.step(function(){ >+ assert_false(mql1.firstListenerCalled, "Check that this listener is only called once."); >+ mql1.firstListenerCalled = true; >+ }); >+ }); >+ >+ mql1.addListener(function(x){ >+ listenerOrderTest.step(function(){ >+ assert_true(mql1.firstListenerCalled, "Check that the listener added last is called last."); >+ }); >+ listenerOrderTest.done(); >+ }); >+ >+ mql1.removeListener(rmListener); >+ >+ mql2.addListener(function(x){ >+ duplicateListenerTest.done(); >+ resizeTest.step(function(){ >+ assert_equals(x, mql2, "Check that the MediaQueryList passed to the handler is the same that addListener was invoked on."); >+ assert_true(mql1.matches, "(max-height: 50px) should still pass."); >+ assert_false(x.matches, "(min-width: 150px) should now fail."); >+ }); >+ resizeTest.done(); >+ }); >+ >+ iframe.height = "50"; >+ };]]> >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMediaAddListener.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMediaAddListener.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7236be7febc985a9432e3127b78acf352bb91fa1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMediaAddListener.html >@@ -0,0 +1,65 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Test: CSSOM View matchMedia addListener</title> >+ <link rel="author" title="Chris Wu" href="mailto:pwx.frontend@gmail.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface" /> >+ <meta name="flags" content="dom" /> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> >+ <style type="text/css"> >+ iframe { border: none; } >+ </style> >+ </head> >+ <body> >+ <div id="log"></div> >+ <iframe width="200" height="100" id="iframe1"></iframe> >+ <script> >+ function reflow(doc) { >+ doc.body.offsetWidth; >+ } >+ >+ var iframe = document.querySelector("iframe"); >+ var iframe_window = window.frames[0]; >+ var iframe1 = document.getElementById("iframe1"); >+ reflow(iframe_window.document); >+ >+ var i = 0; >+ var totalCount = 10; >+ var count = 0; >+ var divineCount = 10; >+ var width_list = [201,199]; >+ var mq1 = iframe_window.matchMedia("(max-width:200px)"); >+ mq1.addListener(function(mql){ >+ >+ count = count + 1; >+ >+ }); >+ >+ var equalAssert = async_test("Check for the correct number of event triggers"); >+ >+ var changeFrameWidth = function(iWidth) { >+ iframe1.style.width = iWidth + "px"; >+ i = (i === 0) ? 1 : 0; >+ totalCount = totalCount - 1; >+ if(totalCount > 0) >+ { >+ step_timeout(function(){ >+ changeFrameWidth(width_list[i]); >+ }, 100); >+ } >+ else >+ { >+ step_timeout(function(){ >+ equalAssert.step(function(){ >+ assert_equals(divineCount, count, "this will be 10 times of event triggers by change width"); >+ }); >+ equalAssert.done(); >+ }, 100); >+ } >+ }; >+ >+ changeFrameWidth(width_list[0]); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/media-query-list-interface.xht b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/media-query-list-interface.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..98bdaae6ec40bdf1c32f131f6a7dfbf730effc73 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/media-query-list-interface.xht >@@ -0,0 +1,70 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSSOM MediaQueryList Test: Properties and Functions</title> >+ <link rel="author" title="Joe Balancio" href="mailto:jlbalancio@gmail.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface" /> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" content="All properties exist and are readonly. All functions exist and are instances of Function" /> >+ <script src="/resources/testharness.js" type="text/javascript" /> >+ <script src="/resources/testharnessreport.js" type="text/javascript" /> >+ </head> >+ <body> >+ <noscript>Test not run - javascript required.</noscript> >+ <div id="log" /> >+ <script type="text/javascript"><![CDATA[ >+ var mediaQueryList; >+ test( >+ function(){ >+ assert_own_property(window, "matchMedia"); >+ mediaQueryList = window.matchMedia('foo'); >+ }, 'window_exposes_matchmedia', { >+ assert: ['window.matchMedia is exposed by window. If this fails, the rest of the test fails.'] >+ } >+ ); >+ /* >+ MediaQueryList Functions >+ */ >+ test( >+ function(){ >+ assert_inherits(mediaQueryList, "addListener"); >+ assert_inherits(mediaQueryList, "removeListener"); >+ }, 'mediaquerylist_inherited_functions', { >+ assert: ['MediaQueryList functions are inherited'] >+ } >+ ); >+ >+ test( >+ function(){ >+ assert_true(mediaQueryList.addListener instanceof Function); >+ assert_true(mediaQueryList.removeListener instanceof Function); >+ }, 'mediaquerylist_functions', { >+ assert: ['MediaQueryList functions are instances of Function'] >+ } >+ ); >+ >+ /* >+ MediaQueryList Properties >+ */ >+ test( >+ function() { >+ assert_inherits(mediaQueryList, 'media'); >+ assert_inherits(mediaQueryList, 'matches'); >+ }, 'mediaquerylist_properties', { >+ assert: ['MediaQueryList properties are inherited'] >+ } >+ ); >+ test( >+ function() { >+ assert_readonly(mediaQueryList, 'media'); >+ assert_readonly(mediaQueryList, 'matches'); >+ }, 'mediaquerylist_properties_readonly', { >+ assert: ['MediaQueryList properties are readonly'] >+ } >+ ); >+ ]]> >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/mouseEvent.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/mouseEvent.html >new file mode 100644 >index 0000000000000000000000000000000000000000..907a2b405e442ba09ae623327d6f7de5492d3a80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/mouseEvent.html >@@ -0,0 +1,17 @@ >+<!doctype html> >+<meta charset=utf-8> >+<head> >+<title>CSSOM MouseEvent tests</title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script> >+test(function () { >+ var mouseEvent = new MouseEvent('mousedown', {clientX: 10, clientY: 20}); >+ assert_equals(mouseEvent.x, 10); >+ assert_equals(mouseEvent.y, 20); >+ mouseEvent = new MouseEvent('mousedown', {clientX: 30, clientY: 40}); >+ assert_equals(mouseEvent.x, 30); >+ assert_equals(mouseEvent.y, 40); >+}, 'MouseEvent\'s x and y must be equal to clientX and clientY.'); >+</script> >+</head> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/negativeMargins.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/negativeMargins.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0616e8b4999e73b5a43d46d7364a079607515f5b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/negativeMargins.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>cssom-view - elementFromPoint and elementsFromPoint dealing with negative margins</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body> >+<div id="outer" style="background:yellow"> >+ <div id="inner" style="width:100px; height:100px; margin-bottom:-100px; background:lime;"></div> >+ Hello >+</div> >+<script> >+ setup({explicit_done:true}); >+ window.onload = function () { >+ var outer = document.getElementById('outer'); >+ var inner = document.getElementById('inner'); >+ var outerRect = outer.getBoundingClientRect(); >+ test(function () { >+ assert_equals(document.elementFromPoint(outerRect.left + 1, >+ outerRect.top + 1), >+ outer, >+ "elementFromPoint should get outer element"); >+ }); >+ test(function () { >+ assert_array_equals(document.elementsFromPoint(outerRect.left + 1, >+ outerRect.top + 1), >+ [inner, outer, document.body, document.querySelector('html')], >+ "elementsFromPoint should get sequence [inner, outer, body, html]"); >+ }); >+ done(); >+ }; >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetParent_element_test.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetParent_element_test.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bb5686d41daebaa6cff5b023cbab5211248b7aac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetParent_element_test.html >@@ -0,0 +1,132 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+<title>CSSOM View ââ offsetParent element test</title> >+<link rel="author" title="neo_and_rayi" href="mailto:1988wangxiao@gmail.com"> >+<link rel="help" href="http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface"> >+<link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+#fixed { >+ position: fixed; >+} >+ >+#none-element { >+ display:none; >+} >+ >+#relative-element { >+ position: relative; >+} >+ >+#absolute-element { >+ position: absolute; >+} >+</style> >+ >+</head> >+<body> >+ >+<div id="body-element-child"></div> >+ >+<div id="relative-element"> >+ <div id="relative-element-child"></div> >+</div> >+ >+<div id="absolute-element"> >+ <div id="absolute-element-child"></div> >+</div> >+ >+<table id="table-element"> >+ <caption> >+ <div id="caption-element-child"></div> >+ </caption> >+ >+ <tbody> >+ <tr id="table-element-tr"> >+ <td id="table-element-td"> >+ <span id="table-element-child"></span> >+ </td> >+ </tr> >+ </tbody> >+</table> >+ >+<div id="none-element"> >+ <a href="#" id="none-element-child-a"></a> >+ <p id="none-element-child-p"></p> >+ <video id="none-element-child-video"></video> >+ <audio id="none-element-child-audio"></audio> >+ <canvas id="none-element-child-canvas"></canvas> >+ <svg id="none-element-child-svg"></svg> >+</div> >+ >+<div id="fixed"> >+</div> >+ >+<div id="log"></div> >+<script type="text/javascript"> >+var getStyle = window.getComputedStyle; >+var html = document.documentElement; >+var body = document.body; >+var fixed_element = document.getElementById('fixed'); >+var none_element = document.getElementById('none-element'); >+ >+var none_element_child_a = document.getElementById('none-element-child-a'); >+var none_element_child_p = document.getElementById('none-element-child-p'); >+var none_element_child_video = document.getElementById('none-element-child-video'); >+var none_element_child_audio = document.getElementById('none-element-child-audio'); >+var none_element_child_canvas = document.getElementById('none-element-child-canvas'); >+var none_element_child_svg = document.getElementById('none-element-child-svg'); >+ >+var relative_element = document.getElementById('relative-element'); >+var absolute_element = document.getElementById('absolute-element'); >+var td_element = document.getElementsByTagName('td')[0]; >+ >+var body_element_child = document.getElementById('body-element-child'); >+var relative_element_child = document.getElementById('relative-element-child'); >+var absolute_element_child = document.getElementById('absolute-element-child'); >+var table_element_child = document.getElementById('table-element-child'); >+ >+var caption_element_child = document.getElementById('caption-element-child'); >+var table_element_tr = document.getElementById('table-element-tr'); >+var table_element = document.getElementById('table-element'); >+ >+test(function() { >+ assert_equals(html.offsetParent,null); >+ assert_equals(body.offsetParent,null); >+ assert_equals(fixed_element.offsetParent,null); >+ assert_equals(none_element.offsetParent,null); >+ assert_equals(none_element_child_a.offsetParent,null); >+ assert_equals(none_element_child_p.offsetParent,null); >+ assert_equals(none_element_child_video.offsetParent,null); >+ assert_equals(none_element_child_audio.offsetParent,null); >+ assert_equals(none_element_child_canvas.offsetParent,null); >+ assert_equals(none_element_child_svg.offsetParent,undefined); >+}, "Valid the algorithm rule of offsetParent check step 1", >+{ assert: "The offsetParent attribute algorithm rule checking passed!" } >+); >+ >+test(function() { >+ assert_equals(body_element_child.offsetParent,body); >+ assert_equals(window.getComputedStyle(relative_element).position,'relative'); >+ assert_equals(relative_element_child.offsetParent,relative_element); >+ assert_equals(window.getComputedStyle(absolute_element).position,'absolute'); >+ assert_equals(absolute_element_child.offsetParent,absolute_element); >+ assert_equals(window.getComputedStyle(td_element).position,'static'); >+ assert_equals(table_element_child.offsetParent,td_element); >+ assert_equals(window.getComputedStyle(table_element_tr).position,'static'); >+ assert_equals(table_element_tr.offsetParent,table_element); >+ assert_equals(window.getComputedStyle(caption_element_child).position,'static'); >+ assert_equals(caption_element_child.offsetParent,table_element); >+ assert_equals(window.getComputedStyle(td_element).position,'static'); >+ assert_equals(td_element.offsetParent,table_element); >+}, "Valid the algorithm rule of offsetParent check step 2", >+{ assert: "The offsetParent attribute algorithm rule checking passed!" } >+); >+ >+</script> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetTopLeftInScrollableParent.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetTopLeftInScrollableParent.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8f4433795424a00a896278173747aa9e192e181d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetTopLeftInScrollableParent.html >@@ -0,0 +1,111 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title></title> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<div id=log></div> >+<div id="parent" style="overflow:scroll; height: 100px; position: relative"> >+ <div id="spacer" style="height: 200px"></div> >+ <div id="child"></div> >+ <div id="absolute-child" style="position: absolute; top: 41px; left: 43px"></div> >+</div> >+<script> >+test(function() { >+ var child = document.getElementById("child"); >+ assert_equals(child.offsetTop, 200, "Child is after spacer"); >+ assert_equals(child.offsetLeft, 0, "Child is flush left"); >+ var absChild = document.getElementById("absolute-child"); >+ assert_equals(absChild.offsetTop, 41, "Abspos child is y-positioned"); >+ assert_equals(absChild.offsetLeft, 43, "Abspos child is x-positioned"); >+}, "Basic functionality"); >+ >+test(function() { >+ var parent = document.getElementById("parent"); >+ parent.scrollTop = 100; >+ var child = document.getElementById("child"); >+ assert_equals(child.offsetTop, 200, "Child is after spacer"); >+ assert_equals(child.offsetLeft, 0, "Child is flush left"); >+ var absChild = document.getElementById("absolute-child"); >+ assert_equals(absChild.offsetTop, 41, "Abspos child is y-positioned"); >+ assert_equals(absChild.offsetLeft, 43, "Abspos child is x-positioned"); >+}, "Basic functionality in scrolled parent"); >+ >+test(function() { >+ var child = document.getElementById("child"); >+ child.style.marginTop = "20px" >+ child.style.marginLeft = "100px"; >+ assert_equals(child.offsetTop, 220, "Child is after spacer and margin"); >+ assert_equals(child.offsetLeft, 100, "Child is 100px from left"); >+ var absChild = document.getElementById("absolute-child"); >+ absChild.style.marginTop = "20px" >+ absChild.style.marginLeft = "100px"; >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child"); >+ >+test(function() { >+ var parent = document.getElementById("parent"); >+ parent.style.marginTop = "66px" >+ parent.style.marginLeft = "33px"; >+ var child = document.getElementById("child"); >+ assert_equals(child.offsetTop, 220, "Child is after spacer and margin"); >+ assert_equals(child.offsetLeft, 100, "Child is 100px from left"); >+ var absChild = document.getElementById("absolute-child"); >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child and parent"); >+ >+test(function() { >+ var child = document.getElementById("child"); >+ child.style.borderTop = "13px solid green"; >+ child.style.borderLeft = "7px solid green"; >+ assert_equals(child.offsetTop, 220, "Child is after spacer and margin"); >+ assert_equals(child.offsetLeft, 100, "Child is 100px from left"); >+ var absChild = document.getElementById("absolute-child"); >+ absChild.style.borderTop = "13px solid green"; >+ absChild.style.borderLeft = "7px solid green"; >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child and parent, border on child"); >+ >+test(function() { >+ var parent = document.getElementById("parent"); >+ parent.style.borderTop = "23px solid yellow"; >+ parent.style.borderLeft = "19px solid yellow"; >+ var child = document.getElementById("child"); >+ assert_equals(child.offsetTop, 220, "Child is after spacer and margin"); >+ assert_equals(child.offsetLeft, 100, "Child is 100px from left"); >+ var absChild = document.getElementById("absolute-child"); >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child and parent, border on child and parent"); >+ >+ >+test(function() { >+ var child = document.getElementById("child"); >+ child.style.paddingTop = "31px"; >+ child.style.paddingLeft = "37px"; >+ assert_equals(child.offsetTop, 220, "Child is after spacer and margin"); >+ assert_equals(child.offsetLeft, 100, "Child is 100px from left"); >+ var absChild = document.getElementById("absolute-child"); >+ absChild.style.paddingTop = "31px"; >+ absChild.style.paddingLeft = "37px"; >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child and parent, border on child and parent, padding on child"); >+ >+ >+test(function() { >+ var parent = document.getElementById("parent"); >+ parent.style.paddingTop = "31px"; >+ parent.style.paddingLeft = "37px"; >+ var child = document.getElementById("child"); >+ assert_equals(child.offsetTop, 251, "Child is after spacer and margin and parent padding"); >+ assert_equals(child.offsetLeft, 137, "Child is 100px + parent padding from left"); >+ var absChild = document.getElementById("absolute-child"); >+ // Padding on the parent does not affect the position of the absolute containing block. >+ assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin"); >+ assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin"); >+}, "Margins on child and parent, border on child and parent, padding on child and parent"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/elementsFromPoint.js b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/elementsFromPoint.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ba986ef3f568d4971eb4e84c4faaeae6e276b975 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/elementsFromPoint.js >@@ -0,0 +1,48 @@ >+function nodeToString(node) { >+ var str = ''; >+ if (node.nodeType == Node.ELEMENT_NODE) { >+ str += node.nodeName; >+ if (node.id) >+ str += '#' + node.id; >+ else if (node.class) >+ str += '.' + node.class; >+ } else if (node.nodeType == Node.TEXT_NODE) { >+ str += '\'' + node.data + '\''; >+ } else if (node.nodeType == Node.DOCUMENT_NODE) { >+ str += '#document'; >+ } >+ return str; >+} >+ >+function nodeListToString(nodes) { >+ var nodeString = ''; >+ >+ for (var i = 0; i < nodes.length; i++) { >+ var str = nodeToString(nodes[i]); >+ if (!str) >+ continue; >+ nodeString += str; >+ if (i + 1 < nodes.length) >+ nodeString += ', '; >+ } >+ return nodeString; >+} >+ >+function assertElementsFromPoint(doc, x, y, expected) { >+ var query = doc + '.elementsFromPoint(' + x + ',' + y + ')'; >+ var sequence = eval(query); >+ assert_equals(nodeListToString(sequence), nodeListToString(expected), query); >+} >+ >+function checkElementsFromPointFourCorners(doc, element, expectedTopLeft, expectedTopRight, expectedBottomLeft, expectedBottomRight) { >+ var rect = eval(doc + '.getElementById(\'' + element + '\')').getBoundingClientRect(); >+ var topLeft = {x: rect.left + 1, y: rect.top + 1}; >+ var topRight = {x: rect.right - 1, y: rect.top + 1}; >+ var bottomLeft = {x: rect.left + 1, y: rect.bottom - 1}; >+ var bottomRight = {x: rect.right - 1, y: rect.bottom - 1}; >+ >+ assertElementsFromPoint(doc, topLeft.x, topLeft.y, expectedTopLeft); >+ assertElementsFromPoint(doc, topRight.x, topRight.y, expectedTopRight); >+ assertElementsFromPoint(doc, bottomLeft.x, bottomLeft.y, expectedBottomLeft); >+ assertElementsFromPoint(doc, bottomRight.x, bottomRight.y, expectedBottomRight); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe1.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe1.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ec4699465def9f29722f68c685f0ee50278e6231 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe1.html >@@ -0,0 +1,16 @@ >+<!DOCTYPE HTML> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+#div { >+ width: 100px; >+ height: 100px; >+ background: red; >+} >+</style> >+<div id='div'></div> >+<script> >+window.onload = window.parent.onFrameLoaded(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe2.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe2.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7bb944c9d59349b3a25ab14981ae34f5ef991bec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe2.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE HTML> >+<style> >+html, body { >+ margin: 0; >+ padding: 0; >+} >+#big { >+ width: 125px; >+ height: 500px; >+ background: blue; >+} >+#small { >+ position: absolute; >+ top: 0; >+ left: 0; >+ width: 100px; >+ height: 100px; >+ background: green; >+} >+</style> >+<div id='big'></div> >+<div id='small'></div> >+<script> >+window.onload = window.parent.onFrameLoaded(); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..a3581097350faa7e063f7e2a2258c9b09094dcd5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/elementsFromPoint.js >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe1.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/resources/iframe2.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-behavior-smooth.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-behavior-smooth.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e1a7a6a1680393541a93552b2e9a9a64945e355e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-behavior-smooth.html >@@ -0,0 +1,140 @@ >+<!DOCTYPE html> >+<title>cssom-view - scroll-behavior: smooth</title> >+<link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#smooth-scrolling"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ .filler { height: 10000px } >+ >+ .smooth { >+ scroll-behavior: smooth; >+ } >+ >+ #scrollable { >+ overflow: scroll; >+ width: 100px; >+ height: 100px; >+ } >+</style> >+<div id="testContainer"> >+ <div id="scrollable"> >+ <div class="filler"></div> >+ </div> >+ <div class="filler"></div> >+</div> >+<script> >+ test(() => { >+ scrollable.scrollTo(0, 5000); >+ assert_equals(scrollable.scrollTop, 5000, "Initially scrolls instantly"); >+ scrollable.scrollTo(0, 0); >+ scrollable.className = "smooth"; >+ scrollable.scrollTo(0, 5000); >+ assert_less_than(scrollable.scrollTop, 5000, "scroll-behavior:smooth should not scroll instantly"); >+ scrollable.className = ""; >+ scrollable.scrollTo(0, 0); >+ }, "scroll-behavior: smooth on DIV element"); >+ >+ test(() => { >+ window.scrollTo(0, 5000); >+ assert_equals(window.scrollY, 5000, "Initially scrolls instantly"); >+ window.scrollTo(0, 0); >+ document.documentElement.className = "smooth"; >+ assert_less_than(window.scrollY, 5000, "scroll-behavior:smooth should not scroll instantly"); >+ document.documentElement.className = ""; >+ window.scrollTo(0, 0); >+ }, "HTML element scroll-behavior should propagate to viewport"); >+ >+ test(() => { >+ window.scrollTo(0, 5000); >+ assert_equals(window.scrollY, 5000, "Initially scrolls instantly"); >+ window.scrollTo(0, 0); >+ document.body.className = "smooth"; >+ window.scrollTo(0, 5000); >+ assert_equals(window.scrollY, 5000, "scroll-behavior:smooth on BODY should scroll viewport instantly"); >+ document.body.className = ""; >+ window.scrollTo(0, 0); >+ }, "BODY element scroll-behavior should not propagate to viewport"); >+ >+ var instantHistoryNavigationTest = >+ async_test("Instant scrolling while doing history navigation."); >+ var smoothHistoryNavigationTest = >+ async_test("Smooth scrolling while doing history navigation."); >+ >+ function instant() { >+ document.documentElement.className = ""; >+ document.body.className = ""; >+ window.scrollTo(0, 0); >+ var p = document.createElement("pre"); >+ p.textContent = new Array(1000).join("newline\n"); >+ var a = document.createElement("a"); >+ a.href = "#"; >+ a.name = "foo"; >+ a.textContent = "foo"; >+ p.appendChild(a); >+ document.body.appendChild(p); >+ window.onhashchange = function() { >+ window.onhashchange = function() { >+ instantHistoryNavigationTest.step(function() { >+ assert_equals(location.hash, "", "Shouldn't be scrolled to a fragment."); >+ assert_equals(window.scrollY, 0, "Shouldn't be scrolled back to top yet."); >+ }); >+ p.remove(); >+ instantHistoryNavigationTest.done(); >+ smooth(); >+ } >+ >+ instantHistoryNavigationTest.step(function() { >+ assert_equals(location.hash, "#foo", "Should be scrolled to a fragment."); >+ assert_not_equals(window.scrollY, 0, "Shouldn't be scrolled to top anymore."); >+ }); >+ history.back(); >+ } >+ >+ instantHistoryNavigationTest.step(function() { >+ assert_equals(window.scrollY, 0, "Should be scrolled to top."); >+ assert_equals(location.hash, "", "Shouldn't be scrolled to a fragment."); >+ }); >+ location.hash = "foo"; >+ }; >+ instant(); >+ >+ function smooth() { >+ document.documentElement.className = ""; >+ document.body.className = ""; >+ window.scrollTo(0, 0); >+ var p = document.createElement("pre"); >+ p.textContent = new Array(1000).join("newline\n"); >+ var a = document.createElement("a"); >+ a.href = "#"; >+ a.name = "bar"; >+ a.textContent = "bar"; >+ p.appendChild(a); >+ document.body.appendChild(p); >+ window.onhashchange = function() { >+ window.onhashchange = function() { >+ smoothHistoryNavigationTest.step(function() { >+ assert_equals(location.hash, "", "Shouldn't be scrolled to a fragment."); >+ assert_not_equals(window.scrollY, 0, "Shouldn't be scrolled back to top yet."); >+ }); >+ p.remove(); >+ smoothHistoryNavigationTest.done(); >+ } >+ >+ smoothHistoryNavigationTest.step(function() { >+ assert_equals(location.hash, "#bar", "Should be scrolled to a fragment."); >+ assert_not_equals(window.scrollY, 0, "Shouldn't be scrolled to top anymore."); >+ }); >+ history.back(); >+ } >+ >+ smoothHistoryNavigationTest.step(function() { >+ assert_equals(window.scrollY, 0, "Should be scrolled to top."); >+ assert_equals(location.hash, "", "Shouldn't be scrolled to a fragment."); >+ }); >+ location.hash = "bar"; >+ document.documentElement.className = "smooth"; >+ }; >+ >+ testContainer.style.display = "none"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-no-layout-box.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-no-layout-box.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cc67ce76ed9d432656b37c9c81a20e86d1bafc8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-no-layout-box.html >@@ -0,0 +1,21 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>cssom-view - Scrolling element with no layout box</title> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scroll"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#css-layout-box"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<div style="display: none"> >+ <div id="elem"></div> >+</div> >+ >+<script> >+test(() => { >+ const elem = document.getElementById('elem'); >+ elem.scroll(1, 2); >+ >+ assert_equals(elem.scrollTop, 0, "scrollTop should be unchanged"); >+ assert_equals(elem.scrollLeft, 0, "scrollLeft should be unchanged"); >+}, "scrolling an element with no CSS layout box should have no effect"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html >new file mode 100644 >index 0000000000000000000000000000000000000000..930702aa8792506df50120feaca86d3f76bc1a02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html >@@ -0,0 +1,78 @@ >+<!DOCTYPE html> >+<title>CSSOM View - scrollIntoView considers scroll-margin</title> >+<meta charset="utf-8"> >+<link rel="author" title="Sandra Sun" href="mailto:sunyunjia@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> >+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-margin"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<style> >+#scroller { >+ width: 200px; >+ height: 200px; >+ overflow: scroll; >+} >+#content { >+ width: 500px; >+ height: 500px; >+} >+#target { >+ position: relative; >+ left: 200px; >+ top: 200px; >+ width: 100px; >+ height: 100px; >+ scroll-margin-top: 4px; >+ scroll-margin-right: 8px; >+ scroll-margin-bottom: 12px; >+ scroll-margin-left: 16px; >+ background-color: lightgreen; >+} >+</style> >+ >+<div id="scroller"> >+ <div id="content"> >+ <div id="target"></div> >+ </div> >+</div> >+<div id="log"></div> >+ >+<script> >+var target = document.getElementById("target"); >+var scroller = document.getElementById("scroller"); >+ >+var expectedXLeft = 200 - 16; >+var expectedXRight = 200 - scroller.clientWidth + target.clientWidth + 8; >+var expectedXCenter = 200 - (scroller.clientWidth / 2) + >+ (target.clientWidth + 8 - 16) / 2; >+ >+var expectedYTop = 200 - 4; >+var expectedYBottom = 200 - scroller.clientHeight + target.clientHeight + 12; >+var expectedYCenter = 200 - (scroller.clientHeight / 2) + >+ (target.clientHeight + 12 - 4) / 2; >+ >+// This formats dict as a string suitable as test name. >+// format_value() is provided by testharness.js, >+// which also preserves sign for -0. >+function format_dict(dict) { >+ const props = []; >+ for (let prop in dict) { >+ props.push(`${prop}: ${format_value(dict[prop])}`); >+ } >+ return `{${props.join(", ")}}`; >+} >+ >+[ >+ [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter], >+ [{block: "start", inline: "start"}, expectedXLeft, expectedYTop], >+ [{block: "end", inline: "end"}, expectedXRight, expectedYBottom], >+].forEach(([input, expectedX, expectedY]) => { >+ test(() => { >+ scroller.scrollTo(0, 0); >+ target.scrollIntoView(input); >+ assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX"); >+ assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY"); >+ }, `scrollIntoView(${format_dict(input)})`); >+}) >+</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5fdedf753d7296c772766fb9398df8d5494b9b27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html >@@ -0,0 +1,77 @@ >+<!DOCTYPE html> >+<title>CSSOM View - scrollIntoView considers scroll-padding</title> >+<meta charset="utf-8"> >+<link rel="author" title="Sandra Sun" href="mailto:sunyunjia@chromium.org"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> >+<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-padding"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<style> >+#scroller { >+ width: 200px; >+ height: 200px; >+ overflow: scroll; >+ scroll-padding-top: 4px; >+ scroll-padding-right: 8px; >+ scroll-padding-bottom: 12px; >+ scroll-padding-left: 16px; >+} >+#content { >+ width: 500px; >+ height: 500px; >+} >+#target { >+ position: relative; >+ left: 200px; >+ top: 200px; >+ width: 100px; >+ height: 100px; >+ background-color: lightgreen; >+} >+</style> >+ >+<div id="scroller"> >+ <div id="content"> >+ <div id="target"></div> >+ </div> >+</div> >+<div id="log"></div> >+ >+<script> >+var target = document.getElementById("target"); >+var scroller = document.getElementById("scroller"); >+var expectedXLeft = 200 - 16; >+var expectedXRight = 200 - scroller.clientWidth + 8 + target.clientWidth; >+var expectedXCenter = 200 - (16 + scroller.clientWidth - 8) / 2 + >+ target.clientWidth / 2; >+ >+var expectedYTop = 200 - 4; >+var expectedYBottom = 200 - scroller.clientHeight + 12 + target.clientHeight; >+var expectedYCenter = 200 - (4 + scroller.clientHeight - 12) / 2 + >+ target.clientHeight / 2; >+ >+// This formats dict as a string suitable as test name. >+// format_value() is provided by testharness.js, >+// which also preserves sign for -0. >+function format_dict(dict) { >+ const props = []; >+ for (let prop in dict) { >+ props.push(`${prop}: ${format_value(dict[prop])}`); >+ } >+ return `{${props.join(", ")}}`; >+} >+ >+[ >+ [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter], >+ [{block: "start", inline: "start"}, expectedXLeft, expectedYTop], >+ [{block: "end", inline: "end"}, expectedXRight, expectedYBottom], >+].forEach(([input, expectedX, expectedY]) => { >+ test(() => { >+ scroller.scrollTo(0, 0); >+ target.scrollIntoView(input); >+ assert_approx_equals(scroller.scrollLeft, expectedX, 0.5, "scrollX"); >+ assert_approx_equals(scroller.scrollTop, expectedY, 0.5, "scrollY"); >+ }, `scrollIntoView(${format_dict(input)})`); >+}) >+</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-shadow.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-shadow.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eb1bce37d2cdc09640eb1aa20951f75d2a8aa36f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-shadow.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<title>Check End Position of scrollIntoView of shadow elements</title> >+<div id="container"> >+ <div id="space1" style="height: 2000px; width: 2000px;background-color: yellow"> >+ </div> >+ <div id="shadow"></div> >+ <div id="space2" style="height: 2000px; width: 2000px;background-color: blue"> >+ </div> >+</div> >+<script> >+add_completion_callback(() => document.getElementById("container").remove()); >+ >+test(t => { >+ var shadow = document.getElementById("shadow"); >+ var shadowRoot = shadow.attachShadow({ mode: "open" }); >+ var shadowDiv = document.createElement("div"); >+ shadowDiv.style.height = "200px"; >+ shadowDiv.style.width = "200px"; >+ shadowDiv.style.backgroundColor = "green"; >+ shadowRoot.appendChild(shadowDiv); >+ >+ window.scrollTo(0, 0); >+ var expected_x = shadowDiv.offsetLeft; >+ var expected_y = shadowDiv.offsetTop; >+ assert_not_equals(window.scrollX, expected_x); >+ assert_not_equals(window.scrollY, expected_y); >+ shadowDiv.scrollIntoView({block: "start", inline: "start"}); >+ assert_approx_equals(window.scrollX, expected_x, 1); >+ assert_approx_equals(window.scrollY, expected_y, 1); >+}, "scrollIntoView should behave correctly if applies to shadow dom elements"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-smooth.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-smooth.html >new file mode 100644 >index 0000000000000000000000000000000000000000..70343cb42530147fe08575c7cd69912be8944213 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-smooth.html >@@ -0,0 +1,101 @@ >+<!DOCTYPE HTML> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<title>Check End Position of smooth scrollIntoView</title> >+<div id="container" style="height: 2500px; width: 2500px;"> >+ <div id="content" style="height: 500px; width: 500px;margin-left: 1000px; margin-right: 1000px; margin-top: 1000px;margin-bottom: 1000px;background-color: red"> >+ </div> >+ <div id="shadow"></div> >+</div> >+<script> >+var content_height = 500; >+var content_width = 500; >+var window_height = document.documentElement.clientHeight; >+var window_width = document.documentElement.clientWidth; >+var content = document.getElementById("content"); >+add_completion_callback(() => document.getElementById("container").remove()); >+ >+function waitForScrollEnd() { >+ var last_changed_frame = 0; >+ var last_x = window.scrollX; >+ var last_y = window.scrollY; >+ return new Promise((resolve, reject) => { >+ function tick(frames) { >+ // We requestAnimationFrame either for 500 frames or until 20 frames with >+ // no change have been observed. >+ if (frames >= 500 || frames - last_changed_frame > 20) { >+ resolve(); >+ } else { >+ if (window.scrollX != last_x || window.scrollY != last_y) { >+ last_changed_frame = frames; >+ last_x = window.scrollX; >+ last_y = window.scrollY; >+ } >+ requestAnimationFrame(tick.bind(null, frames + 1)); >+ } >+ } >+ tick(0); >+ }); >+} >+ >+// When testing manually, we need an additional frame at beginning >+// to trigger the effect. >+requestAnimationFrame(() => { >+promise_test(t => { >+ window.scrollTo(0, 0); >+ var expected_x = content.offsetLeft + content_width - window_width; >+ var expected_y = content.offsetTop + content_height - window_height; >+ assert_not_equals(window.scrollX, expected_x, "scrollX"); >+ assert_not_equals(window.scrollY, expected_y, "scrollY"); >+ content.scrollIntoView({behavior: "smooth", block: "nearest", inline: >+"nearest"}); >+ return waitForScrollEnd().then(() => { >+ assert_approx_equals(window.scrollX, expected_x, 1, "scrollX"); >+ assert_approx_equals(window.scrollY, expected_y, 1, "scrollY"); >+ }); >+}, "Smooth scrollIntoView should scroll the element to the 'nearest' position"); >+ >+promise_test(t => { >+ window.scrollTo(0, 0); >+ var expected_x = content.offsetLeft; >+ var expected_y = content.offsetTop; >+ assert_not_equals(window.scrollX, expected_x, "scrollX"); >+ assert_not_equals(window.scrollY, expected_y, "scrollY"); >+ content.scrollIntoView({behavior: "smooth", block: "start", inline: >+"start"}); >+ return waitForScrollEnd().then(() => { >+ assert_approx_equals(window.scrollX, expected_x, 1, "scrollX"); >+ assert_approx_equals(window.scrollY, expected_y, 1, "scrollY"); >+ }); >+}, "Smooth scrollIntoView should scroll the element to the 'start' position"); >+ >+promise_test(t => { >+ window.scrollTo(0, 0); >+ var expected_x = content.offsetLeft + (content_width - window_width) / 2; >+ var expected_y = content.offsetTop + (content_height - window_height) / 2; >+ assert_not_equals(window.scrollX, expected_x, "scrollX"); >+ assert_not_equals(window.scrollY, expected_y, "scrollY"); >+ content.scrollIntoView({behavior: "smooth", block: "center", inline: >+"center"}); >+ return waitForScrollEnd().then(() => { >+ assert_approx_equals(window.scrollX, expected_x, 1, "scrollX"); >+ assert_approx_equals(window.scrollY, expected_y, 1, "scrollY"); >+ }); >+}, "Smooth scrollIntoView should scroll the element to the 'center' position"); >+ >+promise_test(t => { >+ window.scrollTo(0, 0); >+ var expected_x = content.offsetLeft + content_width - window_width; >+ var expected_y = content.offsetTop + content_height - window_height; >+ assert_not_equals(window.scrollX, expected_x, "scrollX"); >+ assert_not_equals(window.scrollY, expected_y, "scrollY"); >+ content.scrollIntoView({behavior: "smooth", block: "end", inline: >+"end"}); >+ return waitForScrollEnd().then(() => { >+ assert_approx_equals(window.scrollX, expected_x, 1, "scrollX"); >+ assert_approx_equals(window.scrollY, expected_y, 1, "scrollY"); >+ }); >+}, "Smooth scrollIntoView should scroll the element to the 'end' position"); >+ >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9f1259787bbb33e8f8be6d8fc415738bffee6590 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change-expected.html >@@ -0,0 +1,8 @@ >+<!doctype html> >+<meta charset=utf-8> >+<div id="scroller" style="height: 100px; overflow: scroll"> >+ <div style="height: 1000px"> >+ I should be visible. >+ </div> >+ I should not be visible. >+</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change.html >new file mode 100644 >index 0000000000000000000000000000000000000000..916bfecfeb5a5c7b1c299968331ea7060b16d508 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change.html >@@ -0,0 +1,17 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Setting scrollTop to 0 immediately after toggling display from "none" on an element that had nonzero scrollTop before should work.</title> >+<link rel=match href="scrollTop-display-change-ref.html"> >+<div id="scroller" style="height: 100px; overflow: scroll"> >+ <div style="height: 1000px"> >+ I should be visible. >+ </div> >+ I should not be visible. >+</div> >+<script> >+ scroller.scrollTop = 1000; >+ scroller.style.display = "none"; >+ var win = scroller.scrollTop; // Force layout flush >+ scroller.style.display = ""; >+ scroller.scrollTop = 0; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeight.xht b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeight.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..77b01dbf50befc437bde79436571d2b0f39885e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeight.xht >@@ -0,0 +1,132 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: CSSOM View scrollWidth and scrollHeight</title> >+ <link rel="author" title="Robert O'Callahan" href="mailto:robert@ocallahan.org" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth" /> >+ <meta name="flags" content="dom" /> >+ <script src="/resources/testharness.js" type="text/javascript" /> >+ <script src="/resources/testharnessreport.js" type="text/javascript" /> >+ <style type="text/css"><![CDATA[ >+ #elemSimple, #elemOverflow, #elemNestedOverflow { >+ border:1px solid black; >+ overflow:hidden; >+ width:200px; >+ height:40px; >+ padding-bottom:50px; >+ padding-right:40px; >+ } >+ #elemSimple > div { >+ background:yellow; >+ width:60px; >+ height:30px; >+ } >+ #elemOverflow > div { >+ background:yellow; >+ width:250px; >+ height:150px; >+ } >+ #elemNestedOverflow > div { >+ background:yellow; >+ width:60px; >+ height:30px; >+ } >+ #elemNestedOverflow > div > div { >+ background:blue; >+ width:250px; >+ height:150px; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <noscript>Test not run - javascript required.</noscript> >+ <div id="log" /> >+ <div id="elemSimple"> >+ <div /> >+ </div> >+ <div id="elemOverflow"> >+ <div /> >+ </div> >+ <div id="elemNestedOverflow"> >+ <div> >+ <div /> >+ </div> >+ </div> >+ <script type="text/javascript"><![CDATA[ >+ var elemSimple = document.getElementById("elemSimple"); >+ var elemOverflow = document.getElementById("elemOverflow"); >+ var elemNestedOverflow = document.getElementById("elemNestedOverflow"); >+ >+ test(function(){ >+ assert_equals(elemSimple.clientHeight, 90); >+ }, "elemSimple.clientHeight is the height of the padding edge"); >+ >+ test(function(){ >+ assert_equals(elemSimple.scrollHeight, 90); >+ }, "elemSimple.scrollHeight is its clientHeight"); >+ >+ test(function(){ >+ assert_equals(elemSimple.clientWidth, 240); >+ }, "elemSimple.clientWidth is the width of the padding edge"); >+ >+ test(function(){ >+ assert_equals(elemSimple.scrollWidth, 240); >+ }, "elemSimple.scrollWidth is its clientWidth"); >+ >+ test(function(){ >+ assert_equals(elemOverflow.clientHeight, 90); >+ }, "elemOverflow.clientHeight is the height of the padding edge"); >+ >+ /* This test differs from the spec. Opera and Webkit meet the spec, IE9 and Firefox >+ give the result here. It seems that in this case Opera and Webkit place >+ the padding-bottom below elemOverflow's child (i.e. below elemOverflow's bottom border); >+ you can scroll to it. IE9 and Firefox do not. I believe this is a Webkit/Opera bug >+ (If you remove overflow:hidden then the padding-bottom moves back to be above the bottom >+ border, as expected.) >+ The underlying issue seems to be whether bottom padding on a scrollable element is >+ always placed at the element's bottom border and not scrolled, or else deemed to >+ belong to the scrolled content and placed below the scrolled element's children. >+ Commenting out for now, because this is not really a CSSOM issue, but an issue >+ over the layout of elements with 'overflow'. >+ >+ test(function(){ >+ assert_equals(elemOverflow.scrollHeight, 150); >+ }, "elemOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)"); >+ */ >+ >+ test(function(){ >+ assert_equals(elemOverflow.clientWidth, 240); >+ }, "elemOverflow.clientWidth is the width of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring >+ the right padding. >+ */ >+ test(function(){ >+ assert_equals(elemOverflow.scrollWidth, 250); >+ }, "elemOverflow.scrollHeight is the width of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ test(function(){ >+ assert_equals(elemNestedOverflow.clientHeight, 90); >+ }, "elemNestedOverflow.clientHeight is the height of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here. >+ */ >+ test(function(){ >+ assert_equals(elemNestedOverflow.scrollHeight, 150); >+ }, "elemNestedOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ test(function(){ >+ assert_equals(elemNestedOverflow.clientWidth, 240); >+ }, "elemNestedOverflow.clientWidth is the height of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring >+ the right padding. >+ */ >+ test(function(){ >+ assert_equals(elemNestedOverflow.scrollWidth, 250); >+ }, "elemNestedOverflow.scrollWidth is the width of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ ]]></script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..f0fd373b1dead86070330ef7a43aa3ab99bcf8b6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht >@@ -0,0 +1,122 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS Test: CSSOM View scrollWidth/scrollHeight (for nonscrollable elements)</title> >+ <link rel="author" title="Robert O'Callahan" href="mailto:robert@ocallahan.org" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth" /> >+ <meta name="flags" content="dom" /> >+ <script src="/resources/testharness.js" type="text/javascript" /> >+ <script src="/resources/testharnessreport.js" type="text/javascript" /> >+ <style type="text/css"><![CDATA[ >+ #elemSimple, #elemOverflow, #elemNestedOverflow { >+ border:1px solid black; >+ width:200px; >+ height:40px; >+ padding-bottom:50px; >+ padding-right:40px; >+ } >+ #elemSimple > div { >+ background:yellow; >+ width:60px; >+ height:30px; >+ } >+ #elemOverflow > div { >+ background:yellow; >+ width:250px; >+ height:150px; >+ } >+ #elemNestedOverflow > div { >+ background:yellow; >+ width:60px; >+ height:30px; >+ } >+ #elemNestedOverflow > div > div { >+ background:blue; >+ width:250px; >+ height:150px; >+ } >+ ]]></style> >+ </head> >+ <body> >+ <noscript>Test not run - javascript required.</noscript> >+ <div id="log" /> >+ <div id="elemSimple"> >+ <div /> >+ </div> >+ <div id="elemOverflow"> >+ <div /> >+ </div> >+ <div id="elemNestedOverflow"> >+ <div> >+ <div /> >+ </div> >+ </div> >+ <script type="text/javascript"><![CDATA[ >+ var elemSimple = document.getElementById("elemSimple"); >+ var elemOverflow = document.getElementById("elemOverflow"); >+ var elemNestedOverflow = document.getElementById("elemNestedOverflow"); >+ >+ test(function(){ >+ assert_equals(elemSimple.clientHeight, 90); >+ }, "elemSimple.clientHeight is the height of the padding edge"); >+ >+ test(function(){ >+ assert_equals(elemSimple.scrollHeight, 90); >+ }, "elemSimple.scrollHeight is its clientHeight"); >+ >+ test(function(){ >+ assert_equals(elemSimple.clientWidth, 240); >+ }, "elemSimple.clientWidth is the width of the padding edge"); >+ >+ test(function(){ >+ assert_equals(elemSimple.scrollWidth, 240); >+ }, "elemSimple.scrollWidth is its clientWidth"); >+ >+ test(function(){ >+ assert_equals(elemOverflow.clientHeight, 90); >+ }, "elemOverflow.clientHeight is the height of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring >+ the bottom padding. >+ */ >+ test(function(){ >+ assert_equals(elemOverflow.scrollHeight, 150); >+ }, "elemOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ test(function(){ >+ }, "elemOverflow.clientWidth is the width of the padding edge"); >+ assert_equals(elemOverflow.clientWidth, 240); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring >+ the right padding. >+ */ >+ test(function(){ >+ assert_equals(elemOverflow.scrollWidth, 250); >+ }, "elemOverflow.scrollHeight is the width of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ test(function(){ >+ assert_equals(elemNestedOverflow.clientHeight, 90); >+ }, "elemNestedOverflow.clientHeight is the height of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring the >+ bottom padding. >+ */ >+ test(function(){ >+ assert_equals(elemNestedOverflow.scrollHeight, 150); >+ }, "elemNestedOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ test(function(){ >+ assert_equals(elemNestedOverflow.clientWidth, 240); >+ }, "elemNestedOverflow.clientWidth is the height of the padding edge"); >+ >+ /* This test differs from the spec. All major browsers give the result here, ignoring >+ the right padding. >+ */ >+ test(function(){ >+ assert_equals(elemNestedOverflow.scrollWidth, 250); >+ }, "elemNestedOverflow.scrollWidth is the width of its scrolled contents (ignoring padding, since we overflowed)"); >+ >+ ]]></script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html >new file mode 100644 >index 0000000000000000000000000000000000000000..94357605b7042ba82e93eed8ddf53aedb632efc4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html >@@ -0,0 +1,33 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>cssom-view scrolling-no-browsing-context</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+setup({explicit_done:true}); >+window.onload = function () { >+ test(function () { >+ var doc = document.implementation.createDocument("http://example.com/", "html", null); >+ >+ var element = doc.createElement("tag") >+ assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); >+ assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); >+ >+ element.scrollTop = 10; >+ element.scrollLeft = 10; >+ assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); >+ assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); >+ >+ element.scroll(10, 10); >+ assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); >+ assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); >+ >+ element.scrollTo(10, 10); >+ assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); >+ assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); >+ >+ }, "Element get and set scrollTop, scrollLeft, scroll() and scrollTo() test"); >+ >+ done(); >+}; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-quirks-vs-nonquirks.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-quirks-vs-nonquirks.html >new file mode 100644 >index 0000000000000000000000000000000000000000..568f572ac22c4ac8b619f27abd33d241d37f03ec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-quirks-vs-nonquirks.html >@@ -0,0 +1,220 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>cssom-view - scrolling quirks VS nonquirks mode</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ iframe { >+ width: 300px; >+ height: 500px; >+ } >+</style> >+<iframe id="quirksframe"></iframe> >+<iframe id="nonquirksframe"></iframe> >+<div id="log"></div> >+<script> >+function setBodyContent(body) { >+ // Hide scrollbars and remove body margin to make measures more reliable. >+ body.style.overflow = "hidden"; >+ body.style.margin = 0; >+ >+ // Add an orange border to the body. >+ body.style.borderWidth = "10px 0px 0px 20px"; >+ body.style.borderColor = "orange"; >+ body.style.borderStyle = "solid"; >+ >+ // Create a 700x900 box with a green border. >+ body.innerHTML = "<div id='content' style='border-width: 30px 0px 0px 40px; border-style: solid; border-color: green; width: 660px; height: 870px; background: linear-gradient(135deg, red, blue);'></div>"; >+} >+ >+var quirksModeTest = async_test("Execution of tests in quirks mode"); >+var quirksFrame = document.getElementById("quirksframe"); >+quirksFrame.onload = function() { >+ var doc = quirksFrame.contentDocument; >+ setBodyContent(doc.body); >+ var content = doc.getElementById("content"); >+ >+ quirksModeTest.step(function () { >+ assert_equals(doc.compatMode, "BackCompat", "Should be in quirks mode."); >+ }); >+ >+ test(function () { >+ assert_equals(doc.scrollingElement, doc.body, "scrollingElement should be HTML body"); >+ }, "scrollingElement in quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scroll(50, 60); >+ assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0"); >+ }, "scroll() on the root element in quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scrollBy(10, 20); >+ assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollBy() on the root element in quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scrollLeft = 70; >+ doc.documentElement.scrollTop = 80; >+ assert_equals(doc.documentElement.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.documentElement.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollLeft/scrollTop on the root element in quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.documentElement.scrollWidth, 720, "scrollWidth should be 720"); >+ assert_equals(doc.documentElement.scrollHeight, 910, "scrollHeight should be 910"); >+ }, "scrollWidth/scrollHeight on the root element in quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.documentElement.clientWidth, 300, "clientWidth should be 300"); >+ assert_equals(doc.documentElement.clientHeight, 910, "clientHeight should be 910"); >+ }, "clientWidth/clientHeight on the root element in quirks mode"); >+ >+ test(function () { >+ doc.body.scroll(90, 100); >+ assert_equals(doc.body.scrollLeft, 90, "scrollLeft should be 90"); >+ assert_equals(doc.body.scrollTop, 100, "scrollTop should be 100"); >+ }, "scroll() on the HTML body element in quirks mode"); >+ >+ test(function () { >+ doc.body.scrollBy(10, 20); >+ assert_equals(doc.body.scrollLeft, 100, "scrollLeft should be 100"); >+ assert_equals(doc.body.scrollTop, 120, "scrollTop should be 120"); >+ }, "scrollBy() on the HTML body element in quirks mode"); >+ >+ test(function () { >+ doc.body.scrollLeft = 120; >+ doc.body.scrollTop = 110; >+ assert_equals(doc.body.scrollLeft, 120, "scrollLeft should be 120"); >+ assert_equals(doc.body.scrollTop, 110, "scrollTop should be 110"); >+ }, "scrollLeft/scrollTop on the HTML body element in quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.body.scrollWidth, 720, "scrollWidth should be 720"); >+ assert_equals(doc.body.scrollHeight, 910, "scrollHeight should be 910"); >+ }, "scrollWidth/scrollHeight on the HTML body element in quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.body.clientWidth, 300, "clientWidth should be 300"); >+ assert_equals(doc.body.clientHeight, 500, "clientHeight should be 500"); >+ }, "clientWidth/clientHeight on the HTML body element in quirks mode"); >+ >+ test(function () { >+ doc.scrollingElement.scroll(0, 0); >+ content.scrollLeft = 130; >+ content.scrollTop = 140; >+ assert_equals(content.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(content.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollLeft/scrollRight of the content in quirks mode"); >+ >+ test(function () { >+ assert_equals(content.scrollWidth, 660, "scrollWidth should be 660"); >+ assert_equals(content.scrollHeight, 870, "scrollHeight should be 870"); >+ }, "scrollWidth/scrollHeight of the content in quirks mode"); >+ >+ test(function () { >+ assert_equals(content.clientWidth, 660, "clientWidth should be 660"); >+ assert_equals(content.clientHeight, 870, "clientHeight should be 870"); >+ }, "clientWidth/clientHeight of the content in quirks mode"); >+ >+ quirksModeTest.done(); >+} >+quirksFrame.src = URL.createObjectURL(new Blob([""], { type: "text/html" })); >+ >+var nonQuirksModeTest = async_test("Execution of tests in non-quirks mode"); >+var nonQuirksFrame = document.getElementById("nonquirksframe"); >+nonQuirksFrame.onload = function() { >+ var doc = nonQuirksFrame.contentDocument; >+ setBodyContent(doc.body); >+ var content = doc.getElementById("content"); >+ >+ nonQuirksModeTest.step(function() { >+ assert_equals(doc.compatMode, "CSS1Compat", "Should be in standards mode."); >+ }); >+ >+ test(function () { >+ assert_equals(doc.scrollingElement, doc.documentElement, "scrollingElement should be documentElement"); >+ }, "scrollingElement in non-quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scroll(50, 60); >+ assert_equals(doc.documentElement.scrollLeft, 50, "scrollLeft should be 50"); >+ assert_equals(doc.documentElement.scrollTop, 60, "scrollTop should be 60"); >+ }, "scroll() on the root element in non-quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scrollBy(10, 20); >+ assert_equals(doc.documentElement.scrollLeft, 60, "scrollLeft should be 60"); >+ assert_equals(doc.documentElement.scrollTop, 80, "scrollTop should be 80"); >+ }, "scrollBy() on the root element in non-quirks mode"); >+ >+ test(function () { >+ doc.documentElement.scrollLeft = 70; >+ doc.documentElement.scrollTop = 80; >+ assert_equals(doc.documentElement.scrollLeft, 70, "scrollLeft should be 70"); >+ assert_equals(doc.documentElement.scrollTop, 80, "scrollTop should be 80"); >+ }, "scrollLeft/scrollTop on the root element in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.documentElement.scrollWidth, 720, "scrollWidth should be 720"); >+ assert_equals(doc.documentElement.scrollHeight, 910, "scrollHeight should be 910"); >+ }, "scrollWidth/scrollHeight on the root element in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.documentElement.clientWidth, 300, "clientWidth should be 300"); >+ assert_equals(doc.documentElement.clientHeight, 500, "clientHeight should be 500"); >+ }, "clientWidth/clientHeight on the root element in non-quirks mode"); >+ >+ test(function () { >+ doc.body.scroll(90, 100); >+ assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0"); >+ }, "scroll() on the HTML body element in non-quirks mode"); >+ >+ test(function () { >+ doc.body.scrollBy(10, 20); >+ assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollBy() on the HTML body element in non-quirks mode"); >+ >+ test(function () { >+ doc.body.scrollLeft = 120; >+ doc.body.scrollTop = 110; >+ assert_equals(doc.body.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(doc.body.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollLeft/scrollTop on the HTML body element in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.body.scrollWidth, 700, "scrollWidth should be 700"); >+ assert_equals(doc.body.scrollHeight, 900, "scrollHeight should be 900"); >+ }, "scrollWidth/scrollHeight on the HTML body element in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(doc.body.clientWidth, 280, "clientWidth should be 280"); >+ assert_equals(doc.body.clientHeight, 900, "clientHeight should be 900"); >+ }, "clientWidth/clientHeight on the HTML body element in non-quirks mode"); >+ >+ test(function () { >+ doc.scrollingElement.scroll(0, 0); >+ content.scrollLeft = 130; >+ content.scrollTop = 140; >+ assert_equals(content.scrollLeft, 0, "scrollLeft should be 0"); >+ assert_equals(content.scrollTop, 0, "scrollTop should be 0"); >+ }, "scrollLeft/scrollRight of the content in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(content.scrollWidth, 660, "scrollWidth should be 660"); >+ assert_equals(content.scrollHeight, 870, "scrollHeight should be 870"); >+ }, "scrollWidth/scrollHeight of the content in non-quirks mode"); >+ >+ test(function () { >+ assert_equals(content.clientWidth, 660, "clientWidth should be "); >+ assert_equals(content.clientHeight, 870, "clientHeight should be 870"); >+ }, "clientWidth/clientHeight of the content in non-quirks mode"); >+ >+ nonQuirksModeTest.done(); >+} >+nonQuirksFrame.src = URL.createObjectURL(new Blob(["<!doctype html>"], { type: "text/html" })); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3899f29a678774a72494c99cbcc4f5923b909b1b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001-expected.html >@@ -0,0 +1,3 @@ >+<!-- quirks mode --> >+<html style="overflow:scroll"> >+<body style="overflow:scroll">The body box should have scrollbars. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..51be2245c2fc4e8c4dafc0d8688e2a007217edb4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html >@@ -0,0 +1,17 @@ >+<!-- quirks mode --> >+<html> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSSOM View Test: Dynamically changing scrollingElement to html in quirks mode</title> >+ <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+ <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-document-scrollingelement"> >+ <link rel="match" href="scrollingElement-quirks-dynamic-001-ref.html"> >+ <meta name="assert" content="Checks that setting the overflow on html to scroll will stop propagating body scrollbars to viewport."> >+ </head> >+ <body style="overflow:scroll">The body box should have scrollbars. >+ <script> >+ document.body.offsetTop; // force layout >+ document.documentElement.style.overflow = "scroll"; >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1e3edb6ac9ffdf2c5f9b6e1d5ab8c44b0622e5c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002-expected.html >@@ -0,0 +1,2 @@ >+<!-- quirks mode --> >+<body style="overflow:scroll">The body box should not have scrollbars. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..247113cff42342545dbabd004db55b0e7ee9c35e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html >@@ -0,0 +1,17 @@ >+<!-- quirks mode --> >+<html style="overflow:scroll"> >+ <head> >+ <meta charset="utf-8"> >+ <title>CSSOM View Test: Dynamically changing scrollingElement to body in quirks mode</title> >+ <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> >+ <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-document-scrollingelement"> >+ <link rel="match" href="scrollingElement-quirks-dynamic-002-ref.html"> >+ <meta name="assert" content="Checks that setting the overflow on html to visible will propagate body scrollbars to viewport."> >+ </head> >+ <body style="overflow:scroll">The body box should not have scrollbars. >+ <script> >+ document.body.offsetTop; // force layout >+ document.documentElement.style.overflow = "visible"; >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a438541120df4a3a4e3419aaddfca9d88bd080a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement.html >@@ -0,0 +1,85 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>cssom-view - scrollingElement</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<iframe id="quirksframe"></iframe> >+<iframe id="nonquirksframe"></iframe> >+<div id="log"></div> >+<script> >+async_test(function() { >+ var quirksFrame = document.getElementById("quirksframe"); >+ quirksFrame.onload = this.step_func_done(function() { >+ var quirksDoc = quirksFrame.contentDocument; >+ assert_equals(quirksDoc.compatMode, "BackCompat", "Should be in quirks mode."); >+ assert_not_equals(quirksDoc.body, null, "Should have a body element"); >+ >+ // Tests for quirks mode document. >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body, >+ "scrollingElement in quirks mode should default to body element."); >+ >+ quirksDoc.documentElement.style.overflow = "scroll"; >+ quirksDoc.body.style.overflow = "scroll"; >+ assert_equals(quirksDoc.scrollingElement, null, >+ "scrollingElement in quirks mode should be null if overflow of body and root element isn't visible."); >+ quirksDoc.documentElement.style.overflow = "visible"; >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ quirksDoc.documentElement.style.overflow = "scroll"; >+ quirksDoc.body.style.overflow = "visible"; >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ quirksDoc.documentElement.style.overflow = "visible"; >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ >+ quirksDoc.body.style.display = "none"; >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body) >+ quirksDoc.body.style.display = "block"; >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ >+ quirksDoc.documentElement.appendChild(quirksDoc.createElement("body")); >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.getElementsByTagName("body")[0]); >+ quirksDoc.documentElement.removeChild(quirksDoc.documentElement.lastChild); >+ assert_equals(quirksDoc.scrollingElement, quirksDoc.body); >+ >+ quirksDoc.documentElement.removeChild(quirksDoc.body); >+ assert_equals(quirksDoc.scrollingElement, null); >+ quirksDoc.documentElement.appendChild(quirksDoc.createElementNS("foobarNS", "body")); >+ assert_equals(quirksDoc.scrollingElement, null); >+ >+ quirksDoc.removeChild(quirksDoc.documentElement); >+ assert_equals(quirksDoc.scrollingElement, null); >+ >+ quirksDoc.appendChild(quirksDoc.createElementNS("foobarNS", "html")); >+ quirksDoc.documentElement.appendChild(quirksDoc.createElement("body")); >+ assert_equals(quirksDoc.scrollingElement, null); >+ >+ quirksDoc.removeChild(quirksDoc.documentElement); >+ quirksDoc.appendChild(quirksDoc.createElement("body")); >+ assert_equals(quirksDoc.scrollingElement, null); >+ }); >+ quirksFrame.src = >+ URL.createObjectURL(new Blob([""], { type: "text/html" })); >+}, "scrollingElement in quirks mode"); >+ >+async_test(function() { >+ var nonQuirksFrame = document.getElementById("nonquirksframe"); >+ nonQuirksFrame.onload = this.step_func_done(function() { >+ var nonQuirksDoc = nonQuirksFrame.contentDocument; >+ assert_equals(nonQuirksDoc.compatMode, "CSS1Compat", "Should be in standards mode."); >+ assert_not_equals(nonQuirksDoc.body, null, "Should have a body element"); >+ >+ assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement, >+ "scrollingElement in standards mode should be the document element."); >+ nonQuirksDoc.documentElement.style.overflow = "scroll"; >+ nonQuirksDoc.body.style.overflow = "scroll"; >+ assert_equals(nonQuirksDoc.scrollingElement, nonQuirksDoc.documentElement); >+ >+ nonQuirksDoc.removeChild(nonQuirksDoc.documentElement); >+ assert_equals(nonQuirksDoc.scrollingElement, null); >+ nonQuirksDoc.appendChild(nonQuirksDoc.createElement("foobar")); >+ assert_equals(nonQuirksDoc.scrollingElement.localName, "foobar"); >+ }); >+ nonQuirksFrame.src = >+ URL.createObjectURL(new Blob(["<!doctype html>"], { type: "text/html" })); >+}, "scrollingElement in no-quirks mode"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollintoview.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollintoview.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c69025b4943accd4c0b34e74dbd7862af2521849 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollintoview.html >@@ -0,0 +1,112 @@ >+<!DOCTYPE html> >+<title>CSSOM View - scrollIntoView</title> >+<meta charset="utf-8"> >+<link rel="author" title="Chris Wu" href="mailto:pwx.frontend@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview"> >+<link rel="help" href="https://heycam.github.io/webidl/#es-operations"> >+<link rel="help" href="https://heycam.github.io/webidl/#es-overloads"> >+<meta name="flags" content="dom"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+body.running { margin: 0; padding: 4000px; overflow: hidden } >+body.running #testDiv { >+ width: 200px; >+ height: 200px; >+ background-color: lightgreen; >+} >+</style> >+<body class=running> >+<div id=testDiv></div> >+<div id="log"></div> >+<script> >+var testDiv = document.getElementById('testDiv'); >+ >+var expectedXLeft = 4000; >+var expectedXRight = 4000 - window.innerWidth + testDiv.clientWidth; >+var expectedXCenter = 4000 - (window.innerWidth / 2) + (testDiv.clientWidth / 2); >+ >+var expectedYTop = 4000; >+var expectedYBottom = 4000 - window.innerHeight + testDiv.clientHeight; >+var expectedYCenter = 4000 - (window.innerHeight / 2) + (testDiv.clientHeight / 2); >+ >+[ >+ ["omitted argument", "nearest", expectedYTop], >+ [true, "nearest", expectedYTop], >+ [false, "nearest", expectedYBottom], >+ [undefined, "nearest", expectedYTop], >+ [null, "nearest", expectedYTop], >+ [{}, "nearest", expectedYTop], >+ [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter], >+ [{block: "start", inline: "start"}, expectedXLeft, expectedYTop], >+ [{block: "end", inline: "end"}, expectedXRight, expectedYBottom], >+ [{block: "nearest", inline: "nearest"}, "nearest", "nearest"], >+].forEach(([input, expectedX, expectedY]) => { >+ test(() => { >+ window.scrollTo(0, 0); >+ testScrollIntoView(input); >+ var x = (expectedX === "nearest") ? expectedXRight : expectedX; >+ var y = (expectedY === "nearest") ? expectedYBottom : expectedY; >+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX'); >+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY'); >+ }, `scrollIntoView(${format_input(input)}) starting at left,top`); >+ >+ test(() => { >+ window.scrollTo(0, 12000); >+ testScrollIntoView(input); >+ var x = (expectedX === "nearest") ? expectedXRight : expectedX; >+ var y = (expectedY === "nearest") ? expectedYTop : expectedY; >+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX'); >+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY'); >+ }, `scrollIntoView(${format_input(input)}) starting at left,bottom`); >+ >+ test(() => { >+ window.scrollTo(12000, 0); >+ testScrollIntoView(input); >+ var x = (expectedX === "nearest") ? expectedXLeft : expectedX; >+ var y = (expectedY === "nearest") ? expectedYBottom : expectedY; >+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX'); >+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY'); >+ }, `scrollIntoView(${format_input(input)}) starting at right,top`); >+ >+ test(() => { >+ window.scrollTo(12000, 12000); >+ testScrollIntoView(input); >+ var x = (expectedX === "nearest") ? expectedXLeft : expectedX; >+ var y = (expectedY === "nearest") ? expectedYTop : expectedY; >+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX'); >+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY'); >+ }, `scrollIntoView(${format_input(input)}) starting at right,bottom`); >+}); >+ >+function testScrollIntoView(input) { >+ if (input === "omitted argument") { >+ testDiv.scrollIntoView(); >+ } else { >+ testDiv.scrollIntoView(input); >+ } >+} >+ >+// This formats dict as a string suitable as test name. >+// format_value() is provided by testharness.js, >+// which also preserves sign for -0. >+function format_dict(dict) { >+ const props = []; >+ for (let prop in dict) { >+ props.push(`${prop}: ${format_value(dict[prop])}`); >+ } >+ return `{${props.join(', ')}}`; >+} >+ >+function format_input(input) { >+ if (input === "omitted argument") { >+ return ""; >+ } else if (input === null || typeof input !== "object") { >+ return format_value(input); >+ } >+ return format_dict(input); >+} >+ >+document.body.classList.remove('running'); >+window.scrollTo(0, 0); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-green.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-green.png >new file mode 100644 >index 0000000000000000000000000000000000000000..b98ca0ba0a03c580ac339e4a3653539cfa8edc71 >GIT binary patch >literal 135 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmUzPnffIy#(@^1AIbU >z85$Vo{9HN_$mQ~MaSW-rm7D-%GchneRloNK$dW8^jVKAuPb(=;EJ|f?Ovz75Rq)JB >bOiv9;O-!jQJeg_(RK(!v>gTe~DWM4f4{;-! > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-lime.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-lime.png >new file mode 100644 >index 0000000000000000000000000000000000000000..cb397fb090e199c51e80e4243d1ede03a79aa8d9 >GIT binary patch >literal 135 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmUzPnffIy#(@^1AIbU >z8U8bv#2r`x<Z^ksIEGZ*N=^W>nHU(Ks^9wqWJ#8|MwA5Sr<If^7Ns&crsOB3DtP85 >brl$s_CZ<#to=mj?Dq`?-^>bP0l+XkK_<AEq > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-maroon.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-maroon.png >new file mode 100644 >index 0000000000000000000000000000000000000000..3f86b0721955eb4e0f014102c68c2a9764ef7593 >GIT binary patch >literal 109 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7lsBPi@{?l_gf&vS>O>_ >v4B~>Z+sSM@AcNP_#W95AdU8fW!Vi81W){YV4{giyfD#Ozu6{1-oD!M<@rf3U > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-navy.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-navy.png >new file mode 100644 >index 0000000000000000000000000000000000000000..9b9a03955baea7abde9e056e8604e18694e49b66 >GIT binary patch >literal 109 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7a+~R&>-^LA|6O{7I;J! >w18EO1b~~AE2W0Six;Tb#Tu)9&$oRp}z{JAX(7`d=3n;<h>FVdQ&MBb@0MNe`HUIzs > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-red.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-red.png >new file mode 100644 >index 0000000000000000000000000000000000000000..6bd73ac101874f306d007e9cea8fa3a1f62dce16 >GIT binary patch >literal 135 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmUzPnffIy#(@^1AIbU >z|1&U1KH@Y7a=AQR978H@B_{ycObm=q)$jcQvLs7fBT9nv(@M${i&7aJQ}UBi6+Ckj >b(^G>|6H_V+Po~-c6)||a`njxgN@xNA!@(kn > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-white.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-white.png >new file mode 100644 >index 0000000000000000000000000000000000000000..dd43faec54ae60a210f1eab6ff4e7c88b8e34c97 >GIT binary patch >literal 109 >zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7l!{JxM1({$v_d#0*}aI >wAngIhZYQ(tfDB$w7sn8e>&ZX<|Nmdl!1<f`@5Sbx4?qb9Pgg&ebxsLQ020p~!2kdN > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-gg-rr.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-gg-rr.png >new file mode 100644 >index 0000000000000000000000000000000000000000..84f5b2a4f1d1865d763cac875bfa6a8c5c576c91 >GIT binary patch >literal 224 >zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1SGf4^HT*<jKx9jP7LeL$-D$|I14-?iy0WW >zg+Z8+Vb&Z8pdfpRr>`sfEmlzu3&R;K0lq*X$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj >z3<Y;j-+=H&K5?KTUr!gukc@k8FBtMN81S%c^q)Ar(pb!~&BKo6T4>(2QlSh?@M7jG >eOI|GCZ+2WP<2UBa)$Kro89ZJ6T-G@yGywqpiaLV; > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-green.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-green.png >new file mode 100644 >index 0000000000000000000000000000000000000000..b3c8cf3eb4c89bd8f2d1ffde051856f375e3a3de >GIT binary patch >literal 218 >zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1SGf4^HT*<jKx9jP7LeL$-D$|I14-?iy0WW >zg+Z8+Vb&Z8pdfpRr>`sfEmlzu3yE9XPACF}BuiW)N}Tg^b5rw57@Uhz6H8K46v{J8 >zG8EiBeFMT9`NV;W+&x_!Lo)8YJ?F^Fz`((>;PMkU^HzRy4~NuGe(INq1>ePjdKrGS >TIXtNc8p+`4>gTe~DWM4fy9-d) > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-red.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-red.png >new file mode 100644 >index 0000000000000000000000000000000000000000..823f125b8e4a60f780f00443c9c9a10b9fa1f447 >GIT binary patch >literal 217 >zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1SGf4^HT*<jKx9jP7LeL$-D$|I14-?iy0WW >zg+Z8+Vb&Z8pdfpRr>`sfEmlzuQ<1cFzubXBk|nMYCC>S|xv6<249-QVi6yBi3gww4 >z84B*6z5(HleBwYwZk{fVAsP4Ho@3->VBlchkp2JMEhm9(EUQo2%VrV@UNUpX$1;`+ >Ty_~-WXd;8BtDnm{r-UW|v1>m& > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/README b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/README >new file mode 100644 >index 0000000000000000000000000000000000000000..2e5f2ad0738c58dfdf7b368d1fff7aca4f797156 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/README >@@ -0,0 +1,28 @@ >+CSS Global Support Directory >+============================ >+ >+This directory contains common support files (such as images and external >+style sheets). These are sync'ed into the support directories of all our >+test suites. If you have test-suite-specific support files, please add >+them to the appropriate test-suite-specific support/ directory. >+ >+If you add to a support/ directory, please run the tools/supportprop.py >+script from the top of the repository to cascade support files into the >+lower-level support directories. >+ >+Description of the Common Support File Collection >+------------------------------------------------- >+ >+The 1x1-* images are all exactly one pixel. >+ >+The swatch-* images all use 15x15 cells. >+ >+The square-* images all use 15x15 cells with one pixel borders. >+ >+The pattern-* images use cells of various sizes: >+ >+ pattern-grg-rgr-grg.png 20x20 >+ pattern-rgr-grg-rgr.png 20x20 >+ pattern-tr.png 15x15 >+ pattern-grg-rrg-rgg.png 15x15 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/a-green.css b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/a-green.css >new file mode 100644 >index 0000000000000000000000000000000000000000..b0dbb071d5b05d1c574cd5c9a660f1e3d62c573b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/a-green.css >@@ -0,0 +1 @@ >+.a { color: green; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/b-green.css b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/b-green.css >new file mode 100644 >index 0000000000000000000000000000000000000000..a0473f5ca26652c1229290bbf1f81eabc1e37280 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/b-green.css >@@ -0,0 +1 @@ >+.b { color: green; } >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/c-red.css b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/c-red.css >new file mode 100644 >index 0000000000000000000000000000000000000000..d4ba5c64e95406f541e2f8cc19e192e9f521ed6b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/c-red.css >@@ -0,0 +1 @@ >+.c { color: red; } >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/cat.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/cat.png >new file mode 100644 >index 0000000000000000000000000000000000000000..85dd7324815b8f8ef1a1d0496224c1a0661db9d8 >GIT binary patch >literal 1883 >zcmV-h2c-CkP)<h;3K|Lk000e1NJLTq003eD003hM0ssI3n4EHI0000LbVXQnLvm$d >zbZKvHAXI5>WdH}z3>gRm8%$Aad;kCd2XskIMF-Ff83-yN8ye1400009a7bBm000id >z000id0mpBsWB>pL*-1n}RCwC$Tnn<>HVmXZK1a^ho3&SK4-(g{9GN13#R7t8y*I%m >zZ)BMw!6g9VLwR{T9*v;e^Z&9e>xbnR^*7(`)-M11{_j7xFNSfJ@$>S&(_i1@5GH@m >zhpeXC{afFEKhVJCt^WWpLj3iQEg77_JYJnk79anUvL0gx`(AYZ27s0x;q_WRcJD`A >zg+R7jBu}y@4l@kFdQJ7DGoh@H-xD(&>S?#kV5MJwAHN8ovs16uEnknmyyLJw3_Dz} >z-2t_1y-WcyWmd+)eVZDoh>C$4rk3Oju)y$mQ#%^)+P>PB74gM`GN6$$a17nlNge7- >z3RmB|dPjb|$p?mh6-(D?ThB@WuYf>+sj1twj=G%GFkj5O!mZqLtqotF8cC*N$ri;H >z2HQ+$17ses$k7#RTbJz}gD2-`@wiB%W8DFRH7rLV$VR8C-{$0BU^7QA)6xcOPkeLG >zIC+y8#pH<ZE4DkLuB$eJu=YD09p6saU_=3B*q=j^t+sjfsKzKVsF6<N*#6N`(<ECy >zIXKz+z9s_>H3S(N>pr`5y87*;bv|b^HW*-n7#c-VH5l06wfM%K8tMv%QYu1VMJ&`q >zXuT9g-DjG%ok+2IhK&G~#M;r0zu4sf-`3+KmoX<0eCv7>JZuYAQ4+JlXds3Yz$`iq >zO!pQ9wr}Yor1)n9bJP~%@)tD+crwU7nJ%PeORd0)1m4F<)qG~XO2nT^iMivEf)z-D >zBxjR-YQ3Q3>4*f>(%TkH;D#Ki*aVYot>nkyxLr9zV62-PtQAsVZ<)M&ROZ`q=r-yb >zxV0FojhaWJa00$t-zE`xTYXArX#ra%P+dk^apt~h+vO{<A@@#@ZFd70kl?YRKP5&g >zb`j&Qn9|8fN_S*$P|_f3a(aM4y>N9i$&>6i;Se`Xu#!Aka_7=8lY{bL`gE8-D*^)! >zY7!?ohKiqcXDjd>0jZICXBl_KZ$6sC00LyW54V5*dj5-!>hm-t>Ht(52LoWuR*1xE >z2G*{@twTZxdhmIo{825j6wMk`;$*SKGZc>R!t=-#&gkXa<yH8pw79M3dp_ikAFn&8 >zlrN9ORLOJsca5=ic6o}b2pc1mIER3bjmUh7pG>kkRkQfHYSKVRo~#WuBph;XemDuD >z6qUJ989evMeRwkDj)54kU$UA#IGU-IZHnWTVRA#9kA1APN3ZjwA2_hn2Ug_Nvo#=1 >zvdA6|8~BUnoI@62w{|P|2@lwrchE#7bJ6Kq6kBhZllSFE87tja$&a^Vsv9DzjxZA* >zQVOrQc2nyJWb8G&wn4GZFkUv;Z=ATnxIprXHN_9;9UHeyvrlY2*kxbFPXGYML&r3) >zen%FSp5K}|`|V@N#w>xf>JHCqGnQ($o1mTz0Za^NSrBZ!onF6dnw<3&y(VH1bndXf >z391*{FlywkRueb2`q*Y`c5i|#c-`R1y$R0#>_jShsA?F))d087sWd*L&RJQPVgO6z >zuKDv)`2I=hc!ut73ss<T4Sc(1p2frAo70eTGSQX~W-TmJr(%YaR!iQ`4Ur=@=?jjU >zfTygMe0q~vry0lFm|`8tJ+roq*(WDI6R9%w#!|-Y#%eR(ke!N@^4>>?(GbUMv>AFu >zU<y*Z1YJ38rx1Sr_(M)_9Tc=-h}Yr*n2uA=E}I+loFj7auyHJrfHI|Po@I%y`4tj7 >zZ|2XgMqBeQS(s^b?xD;O6`XX77pU2u-JQEex9#}uQe_K^?kYOxRi<VJVwG%9W16&C >zB}3F3+z%GVHY()dth0|pcjvht>SWGaq^ijA)f<0KH8%k6{9y7l%|MvpgU?6jsh(M$ >z5N*sz^783ghS!jcq!BDms81L*G}VLWyHB!u>=8qC&htH>PmP{A<v#~L#&MqpRv4yG >zw4r_l@+VBe#^s0kwg9GF@{ms(MG=X;Z*q>HB})c5>>6kFjvP9zMaPHfq~YhEr7DrH >zD;~lup<3-juf%_Prr9Z-V4nORxcT&~FF{{2Nk&bqG}pd>$n(1*n4sj(w0;RH6sT{j >zbhUJqyjT6iN>h5jrHP`lGXxi;LI(=%bR`2^fsT95-&yGjH)}sb@TGCA(mUti&QX<4 >z{U$^U=I18hwKL%pN^cWLwM6MtTI+-Up~5fcjt@Bxe*M77{d?${Py^67eTt4eFFZ)l >zh8I~nmB}UQ_u%EtP`CsPA88ZuaO!(Y>9V^z>txmUh$SjH&7r>5XT86X<2m!DSg2-= >z-<rS@<i5Y4N=-ro_(K1~{gF<l7M3R7QZPDFa>~W*e9lSUNASn#NOM-@)>-Im^e@d- >V<q-+yJ<<RG002ovPDHLkV1mLWjBEe^ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-green.css b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-green.css >new file mode 100644 >index 0000000000000000000000000000000000000000..537104e663364492c6ef388e4afce190e9c5bc58 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-green.css >@@ -0,0 +1 @@ >+.import { color: green; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-red.css b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-red.css >new file mode 100644 >index 0000000000000000000000000000000000000000..9945ef47114c2841a746c99a2fb1e93e050aac8b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-red.css >@@ -0,0 +1 @@ >+.import { color: red; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rgr-grg.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rgr-grg.png >new file mode 100644 >index 0000000000000000000000000000000000000000..9b88fbd81149891234185f54f8b4a0431759f181 >GIT binary patch >literal 222 >zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1SGf4^HT*<jKx9jP7LeL$-D$|*pj^6T^Rm@ >z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg44gppHg^c>jqd=iJPZ!6KjC*fy >z8gelx@Gu{^HvM;TY)zwU$c{IS(wnBFeYtT?qh#}i+>eP179zlX|30sumufTRE+B#Q >jJePWx&kbz|5I0kznWOaej?gzin;1M@{an^LB{Ts59-mW( > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rrg-rgg.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rrg-rgg.png >new file mode 100644 >index 0000000000000000000000000000000000000000..fcf4f3fd7d95431b8cd1bc5f5129fcb724c5e40f >GIT binary patch >literal 231 >zcmeAS@N?(olHy`uVBq!ia0vp^x**KK#K6FKsNOXi$XVy<;uunK>uuO>p#}vW?s@X} >z?5{Vn@(E1fdg>#_p5-zBiX+1VA%+4b26mx2|7={&ovNQ>6SXtcysBl-)c><WmS!Y( >zv7BNEzPH=%x{1!KjWd@lmbz(awP;VviDQ{7SW3K#guH|K-#!i8$dVG=UlQ?2Ho)uu >z>9DyExiv#HMbsD$XX>p~Q&Z4f6DV?h!MD37E_}{<nz@wk)ekYNY^%>svR6Ky{&{h` >fDhG(UQO-Q~pMsNotNvM_%Naaf{an^LB{Ts5h3Hy_ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-rgr-grg-rgr.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-rgr-grg-rgr.png >new file mode 100644 >index 0000000000000000000000000000000000000000..d454e3a630cd98146c241537dbb3d4cef313f465 >GIT binary patch >literal 223 >zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1SGf4^HT*<jKx9jP7LeL$-D$|*pj^6T^Rm@ >z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg44gppHg^c>jqd=i}PZ!6KjC*fy >z8gelx@Gu{^HvM;TY>lI9$c{Iy(wkbIbyRJ-o`3vUZZ|(OF9Q6nGtzszXKw9ExeG`j >k-E5KlqACYx1X%C$w4CD$N64zrK&u!$UHx3vIVCg!00%}%YybcN > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-tr.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-tr.png >new file mode 100644 >index 0000000000000000000000000000000000000000..8b4b25364e0ffbe09e563e13b567fa57330e48d5 >GIT binary patch >literal 137 >zcmeAS@N?(olHy`uVBq!ia0vp^azM<_!N$PA*s|9jBoW~0;uunKD><d1=|2z8e@O`m >zi5U_X7?eM1T?jqI(8f2(=fLXOHJ)xxeNNw5J?)fkN19wc<FT&3eZzeBMQLtcCc<9q >mCdFSHSg)@*x>)QnGsEKzd}=q=PizO8&EV<k=d#Wzp$Pzi&n><H > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50%.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50%.png >new file mode 100644 >index 0000000000000000000000000000000000000000..cf2eea6b438a11503a89414cbb2f9f1fde55df0c >GIT binary patch >literal 691 >zcmV;k0!;mhP)<h;3K|Lk000e1NJLTq0077U001%w0ssI3;WRTK0007dNkl<Zc-rlq >zy{h6s7=~wbiC|&k#KzV}uoP2RSPBY)sHIn;ot@^CYHeD*0k6SU@&o=<wt~SzQP6LT >z+1+9bIY?G>_PkGJCLw%0c_-t<Byu8R0TE%rfqnf#2=STCc!0-|BNJiWm+$+t+3XF+ >zG01&|R6WZ2a%FMO8DoZFSe6xdSs{%)dLqg~Sttu-y|XONIp^Fk491wQ>y1Vu;JWBp >zVzJoqc$A+V$Du&M;PW30)i^&u7Gwd)f-J~_EXabafA}Ss^LRYITrL@7hr_}5ea4uo >zs-EXfr_-?8qSw;z_hYfxZnq<%d_G?&6l8n7UMHeNA~7D1DXd_+^X%M^b1Xhu#0egw >zA!I?;mp#FUr6!IGxafwE1t1HuAPce}3$g%YK^9~|*6&HOysvn(*(i##-EJ9UsZ`3c >zEZerjZtKO@{G-umsZ=7OWHL!ax~|LH&Qw+HcDr($*H`sP-cZ*0d?q4I(}+k2AsaiL >zj;3j@>xNm@j~53yo6Tl2nfZLaSS%Dp@jOqqx7+P>I$bK2_WONkdm(-b!)ORuq3(u{ >zuZ3eR);?H^UI=h{2M87b0ALRNMpGQFFcbm=3m{kkAXosw0tglW2o^xF0D=Vof&~yP >zfM5aey@Mqmboq;Vy>6Q3^?Ef;v)OFQ#$+;S+qUC4@()R>)vA0j20RIU1AN~f3<kMe >zPA*0wk^B8lM7P^58jZ@v;czH~5JH%ySu7Suqmd9o*Y(L{67t7~@KDnmXti3a)#`LQ >z^?JQ>xhxxNwc21XxLhtDA0P5nd4E{1*Of{|zC6!y9M^SKRYkDydOv{gSOCES0Ko#G >Z;3u}YJM}AuyWao+002ovPDHLkV1h`wI+p+d > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50px.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50px.png >new file mode 100644 >index 0000000000000000000000000000000000000000..9f46583665ca6471075227f9e2244f1ba1ffece0 >GIT binary patch >literal 671 >zcmV;Q0$}}#P)<h;3K|Lk000e1NJLTq0074T001%w0ssI35I<<G0007JNkl<Zc-rlq >zv8v)g6oyYUj*(OvJMF|<*xQPQHX;gQ=Q9YtMk4qIcD_Uk3p+s&EW|>6gP<0o<3OBS >z1j1$6y@J=>jmiI2W)i~T^Pfp3CPtA`(u;`E>xkCAIOm38{A6Fs3%^GNnFzqX(&;o2 >zDT)%hOaxRt$_h?dilXdxyZwIuAIl18<k1sR7Ro|dDC@73<(+Ub#)4IrH|Pr?i0E>; >z;NbHP*$SvFj1Q0nSpc#i3$h>!vLNd#s;X8h6(Y)HGDMWkW{IfR>*e!#BI@`1L^K!- >zq999sxJ98*&~=@N=JPpYY_r)A(Q>)W<#PTuuIolY7N$GT%2E_8{&5kbJC1`e1yhkZ >z{QWZiAyepm0H$CHreF%DU<$w#Ou-aPy%*}kd9U|DN?9(KiD<D{L{ydh79vWeQmfTU >zN_jXOj>n_dsO!3I+fqu~wx`pn*C<1c`p_d0X`044S5?*jCFXoSGsc7vhGD3xigAie >z)6_I=x7!g>wOXy$>t1^zkyx+So-)UAqG0No%Wt8-X!kNxI7<M}X6pN1hP7CW{s%Cs >z1EdN70HQYojOJV%M?e6ODu7f0qzV9}3LsSgsR9700!S4=ssK_208$0QoT}fxKB3)i >zTb3n+uq><7>A-U2c*&C|r_;$a%~Gl4EyiN8`~5DZbX_+dkNXem%w{vr`D8LF7K>iv >z?RKlxYUA;^)oKYL{4FJTXMQ?Xb-Uf|cFP#!ocsSC*Jw0`!=VsjG#WLVO@HH$j}Ibp >z9OvtMgBWAUWb%5w;_jEw@bB(q!d+8H6#$q60;CFrn@_JUXnGtsT_OMg002ovPDHLk >FV1h+lHID!Q > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-100px.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-100px.png >new file mode 100644 >index 0000000000000000000000000000000000000000..a837eca2225082917dc952efd5c689e1b51d7bbd >GIT binary patch >literal 760 >zcmeAS@N?(olHy`uVBq!ia0vp^MnHU=gNcEGaWU)iTMP_L`#oJ8Ln>~)opsRfQGkd; >ze)kq>afh25lNKiW9??&5?NHJA%O>=XS@{0}+4zG^EwY_?F_M#iv9}3z1aeiSUzA*K >zu(aV(kHK?2k3BK|`KL4QXWugp33W=8Xj?T)Nc8vQ(%9`GT4(2eudkH7c2+NL?u$dR >z-nKS2Z~j`Y^K+f^ZT|OzL59~vJ9g=>@?L(q?{UxZ$KUny^7DVzuDt!h?mmN?plfyf >zmG|FWk8IKrjGUqMkB_(Yd8N`MAGQ3vyhA@<bgG)GyNbMZyBKBu{M65@X^X#_xz|N( >zNI2NE)qRbRnzGW(oG=%g^U{3n2NQ}bDsH?iaanTtWy$WlscV`SSj{;6?RV|zP4C{l >zb6FCjH+xxSZLO}-<dZ7%&v$p^-rjt(=cAyQ4#>1ywbzy(%Ux#+<}|T#gG9?_n$GnL >zUK#SiePsyOw7;>}x9Vgku7B`~<KEgPU54g^2R_?``Yyk`>Xk*`s(JJ0KQFQj%{7r) >zbt}iL)bq?nx5a@6yp{&7nsqXz>CffMm(RcYnakO|rl9#~(#I!HTteT!e?R%;lGnRd >zMQMom`TO7h&1I+D{M{YwHHiH{KeA^3UX!~oKff$N`Q3$OHK!M>^?md}Ue5YP`;WJ` >zoGPcdSKa}V$916$caR7I{lB!WCtmR1qOjFlqjc|ok6s(LH?H5a&h2Na;zQo04{aAN >z%iOnj@5)!NUuP>#?C|XJSbx2`vNCh~ZFhHf$0DPdQ%*l!y?XWL&Bph?D}P^q>`h+m >zFXb?;somY&_rL4w>#x3=<rC!6*Wd5@<m1PSg>$|yNsZi=Yj1B~pCFjW&0YS{yFmW8 >z{%3D_dwKh-9vNpof7j<_ShMfbl=P&-N7}Xp$UV*Eei}Fr#*lj&2u6iKLAmWf*~0AY >cw|+4$pP;3B^U*VLV7g}TboFyt=akR{0G}~+v;Y7A > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-50px.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-50px.png >new file mode 100644 >index 0000000000000000000000000000000000000000..84141028020b7e8cdf2412acbca3c799ba50a534 >GIT binary patch >literal 757 >zcmeAS@N?(olHy`uVBq!ia0vp^MnHU=gNcEGaWU)iTMP_LdpunnLn>~)o#p7Q6)4em >z{$d*2BG*@!Lc3jVdA+?Q+2PW(<&`<hUq0SH>~H^wHaWhIaoO!ruE(m{QKE2v_l)kA >z-e(KKcYm$vKGDDac}?&6nKO$m!Y2I`xEAGUC@i-6WK{O=zyHpiJNNeO+xv#s?=j!Z >zxcM?)V^6`#D~}&Pp5?A$`q-&{Ubpelh>!(auZC((&D%cv^wS>0zQ+>Dv(7%_|5v|q >zao)lohkkPybSa7E=I2W%vo$wv-F7j<M5=efqK_3hJ(iZ1hR5E#eOo#2c)7cvt4QFM >zmy258?Tg>%?^YeP{?keR*WWj6TXu)LZemGAMMlrg{rmeFE-(LJ<A3S&Y482_`L|4a >zV$ruGZ1vX<9}HH``Sp4I^9xs8BD45(?Git7i|IscNI2NU%6%<AQFrUQr?(D+*uNsK >z-AeFYem8ITy4x>H79F(9J8|Uk$H$M8Jv&{Tg0!YiDk&_S=(k)oHZIO<*REZcdS={{ >zuBxt{yk+-pZOxfJY$vZ@zkcEDg32{MYQY*JDz>(^mVKA=wyUOYzPWhuV$b-4=Px{% >z$%e2T?g|j&pZPVd@7osh<~-+>HNJ0@q3xBETkz(j;nVk5#ZE1@IrSJs=KbBV&8b#r >zs@K)5tKa`-ZH>~KK0UlH?2I+Pa;AYqh}P8R=H>^<I%3lO$0yypfB*5vA5Q|#-o1Ob >zz+%ny*S~-Nb}TZHdiwe2?Afz7Z#KUF-I?$98QU)7&slTl&$qX?-@VRShVSyrk_kFu >z-9WGGdw)G^>*dRrJqy()8y@>owKqh|)N|Lm*OhSvei_W#^M7W~=v`a$@8~4GJx?va >z-#4{oh}c&&{rS;0ap_x5l~b1MPI0e<Gk|OmIt~)N1C)g`AmVT`zVHuY?mGL;&f7B= >Q0uwcZr>mdKI;Vst0OKlsf&c&j > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-purple.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-purple.png >new file mode 100644 >index 0000000000000000000000000000000000000000..0f522d78728417b0f74b694e2e47cd41c00359d1 >GIT binary patch >literal 92 >zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pu3?vyBU)>3$*aCb)TpJh~{xkePDssRFB<<<q >n7*cU7`N#kLjg3MaSNIuL+z|fjF-g!1D9PaI>gTe~DWM4f*isp& > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-teal.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-teal.png >new file mode 100644 >index 0000000000000000000000000000000000000000..e567f51b91bbe40754cb0e0cae066201219cbb4a >GIT binary patch >literal 92 >zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pu3?vyBU)>3$*aCb)Tp1b~82<lv|F?D~NZQlI >nF{I*F@{j-f8ykf<uJALgxFP)4W0Ig3P?EvZ)z4*}Q$iB}@>Uv7 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-white.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-white.png >new file mode 100644 >index 0000000000000000000000000000000000000000..5853cbb238cb2d4aba3dd49af3f2ba64d6c7a2de >GIT binary patch >literal 78 >zcmeAS@N?(olHy`uVBq!ia0vp^f*{NRBpBq_B-DVEsHcl#NX4yWiv~UkzCZ4)$}udm >Z3=C_{1@!OB{@4Xl=;`X`vd$@?2>|f05A6T| > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/README b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/README >new file mode 100644 >index 0000000000000000000000000000000000000000..ea8cb9ef357d0174bf7c598f9b1b1ab04a1f35de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/README >@@ -0,0 +1,4 @@ >+The swatch-green.png file in this directory is really a RED swatch, >+and the swatch-red.png file is really a green swatch. >+ >+This directory is used to test relative URIs. >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-green.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-green.png >new file mode 100644 >index 0000000000000000000000000000000000000000..1caf25c992aa8e23483cddb3334b5f51ec967f4a >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>wg9Y$w!>#KrWA`i(^Q| >dt>gp+Mj%g@f$_JNuojTT;OXk;vd$@?2>=8a4uJpw > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-red.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-red.png >new file mode 100644 >index 0000000000000000000000000000000000000000..0aa79b0c86bd72c2220ecce39b9553e2cd3605b9 >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD?<aroS#c40=Yb%E{-7; >dw~`YS7=b)p2FBl7!dgHUgQu&X%Q~loCIBjB50U@? > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..744d86683598a578501a95a9472ca4970700a6b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/README >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-green.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/support/swatch-red.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-blue.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-blue.png >new file mode 100644 >index 0000000000000000000000000000000000000000..bf2759634d45dbe3df13868341eddb7e4bf24172 >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD+9y-u8K?HKrWA`i(^Q| >dt>gp+Mj%g@f$_JNuojTT;OXk;vd$@?2>>P$4{-nh > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-green.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-green.png >new file mode 100644 >index 0000000000000000000000000000000000000000..0aa79b0c86bd72c2220ecce39b9553e2cd3605b9 >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XD?<aroS#c40=Yb%E{-7; >dw~`YS7=b)p2FBl7!dgHUgQu&X%Q~loCIBjB50U@? > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-lime.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-lime.png >new file mode 100644 >index 0000000000000000000000000000000000000000..55fd7fdaedfc1ed505b111f20fabbca568c68fa5 >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5XE5m;VlehybfLtC=7srr_ >dTgeFuj6j|)1LJQkVJ#qw!PC{xWt~$(6968w4?q9_ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-orange.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-orange.png >new file mode 100644 >index 0000000000000000000000000000000000000000..d3cd498b52bd88ea6c991f050f1ecb1cfdd136bb >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>;I(;rzSbh26A~kT^vIy >dZY3uuFamkH42-|EgtdSy22WQ%mvv4FO#nq@5F-Ep > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-red.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-red.png >new file mode 100644 >index 0000000000000000000000000000000000000000..1caf25c992aa8e23483cddb3334b5f51ec967f4a >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>wg9Y$w!>#KrWA`i(^Q| >dt>gp+Mj%g@f$_JNuojTT;OXk;vd$@?2>=8a4uJpw > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-teal.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-teal.png >new file mode 100644 >index 0000000000000000000000000000000000000000..0293ce89dea5c9413e4c829cc83a4e39d8f23300 >GIT binary patch >literal 156 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11|+SoP4xm&jKx9jP7LeL$-D$|*pj^6T^Rm@ >z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg4R#65`cCM1`H9#R5PZ!4!jq}MV >s85uv$JE$cjEnw)$lDlfNN|Kv_A+(E0c5RvdE}%LFPgg&ebxsLQ0IVw~FaQ7m > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-white.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-white.png >new file mode 100644 >index 0000000000000000000000000000000000000000..1a7d4323d77287d8eb03a89c635b09d099d94869 >GIT binary patch >literal 85 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<H-Bp8I(u6Pcln3BBRT^Jbeb_p*5^7uSm978H@ >gCI9%}-<ZL|Fh5TA$_Ah94}dZZp00i_>zopr0Qo5vZ~y=R > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-yellow.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-yellow.png >new file mode 100644 >index 0000000000000000000000000000000000000000..1591aa0e2e274854ed836cf582235ea0202f9c8e >GIT binary patch >literal 84 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|bAV5X>;L}@UB|w-0=Yb%E{-7; >dw~`YS7=b)p2FBl7!dgHUgQu&X%Q~loCIDbL5Y7Mq > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-bl.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-bl.png >new file mode 100644 >index 0000000000000000000000000000000000000000..904e24e996a3e5da93bef89e10c49e24c07d0ed2 >GIT binary patch >literal 1368 >zcmV-e1*iInP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY >zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0 >z|Ns9065r0w00001VoOIv3m@0SzyJUQ%1J~)RCwC$mrHKsHV}qI#0OA$)CUNV+0PNC >z5z>1FDgrZWOHO<59>534BKsDgp7p3B>I7zAF2$Eby&QX;;i_BGr>dV-tSTkfVYNIl >zi$7l1mTrsB_C8C-i#4X^3LaLG>jn4e0?941+dy=QV9i9xkG(@4H;@(~ogt^a`43yj >z^`**Zh^{Td#Pj%+Qr%fKN-5`g;nYOF+LzqmXhmO+m0gFk>gfe#F-NRAhUdXXT_P3& >z5hZ>zhPowUE`a<#=%qb^0(KmTs?O^A;`TX0ocz1q{qO362uJ`J02e5qdmo1g`RwHP >z!A7z7fk;yZJFK4j+J<J_!!kFwGv}DTl*m6N!y-fSp;zS$vG4R+^f3f3FkDp6`iZB@ >z9Rq0{yOh5|GFgnv$G$b5jmSNW@=3{zpgZ``cV=57#LB;M$gx-;>{j+R-gEgot3{VQ >zT_EJMJvHm{U-0*2vCJ(xH5>9<9E?yX{cn>?Cg7{`b(@FBIAj4b8LLlxUA}&DNX9v( >z3NQA_a4!BS*5!`~%BqqjA5Y&4uFEHnEyD3&j#zU)o^f5S%cniIzr|OZ3i>ow5`DiR >zKV-E(ZYQ3EdZkb6@<UeNeUB?iBFq`D*X2*MI!I#{X}9FZS$$Qmwt_`|Y{-wZnqKV6 >z1blp+IyR9XXEjwg7bU<2vXH;?C)8Cq%49XyvL(Ou3A1w<`?`EvZGvCF2-_3drF_v3 >zWsvc|O+gEO*$ta$@sA0cmcFE8)2I`NWRx;N{9|`#gBRBOOq5lHKJ|AG{lc-r?c}4) >zL-$z5Md6GLEg?qSW3G#N#pKN%xTocLj)Y#BeKpr}_iC1cFHVHGREV^M$HW)&`;U1U >zqa(S7SZ8*J-qhDnFUE@G8)EF3n+2Q$s`7)uute1_k<QgF7t5n>rGpW1SV4To*jSQh >zlcG$a4=ps-GU>1C2_a&@$I%?>7`aa!VnfzdIeZ#?+sUD|PY~B%U0^7GO|Nu@sDsJ# >z@KlWWEXlsO1AjC<{IhGw<M`A>1$M}i5N36xL4oHW;3LYQL{&USeE7rWXggil@q+qy >zcqZ;IV<F)o1Yw4G7>JjWW`PLt<%)`T&`L8>V}>Oa<kn^+iI7n5LHubaqvh(*WJr7^ >z)T>O$2em@zx|mEC771}cDVqgE!@z!yT>QYv82lFP(%@F<5;wl4TqknAA$72YTMI-# >zh4f`KPMMiy>XyGdc~Of)_A<zfoj!JJF(=#0d7SY)+PJ~38KUdBOaRb$*jPKdJK=EV >zrkm0Z8xVG(YE0}Yt@-e>+14L1KJ#R!khI&B)WtXi&X5b{lL3*@ZkLC@MvW|+A?7gN >zW^9D0T;2*9*?`>~p)-$sKP@gC`DhvB0@0TW$+>vr68OLZ|AFHIA?8UIVp5VL8#iJF >zp>x%gNY!OhEyLo1uORl+--}g*Wst2R?yDkOfv7^I8;JRK;rXg-$rj?i69C?WTvb<5 >z-Ama!5K|d3=PQC<K{RE8uwP1VM##=LEUkC!&4^ZAZE86{8mYSe$D&=JS`K8398A-< >zAkI6YxS&bnwNTEyqw<esfq5o26J~CRQnjl~iN@O75YIKX+q?rYE}CZZF2t>$$WP>d >ai~I`(b4pM507-ZN0000<MNUMnLSTZUYM}!F > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-br.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-br.png >new file mode 100644 >index 0000000000000000000000000000000000000000..f413ff5c1a0f2ad9f9a345d3e07be57a59a82207 >GIT binary patch >literal 1045 >zcmV+w1nT>VP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY >zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0 >z|Ns9065r0w00001VoOIv3m@0SzyJUPhe<?1RCwC$ms@V5FcgLlnk;}*nH@}b&;=9; >z`W^{0$~+gU<h>dx3m9n@P^7faO%<|&!sf>KZm^B!d3qut2z>beeU2{xp@)&j(02`` >zTY^Y(yls!8j-g6{#iqXUOZZmq^{tQRnwIpYptOGKE#wg=geU|udB&pePc3cOueFKs >zvzd?t6~fN!7xtH~ecHeFR|~mNE=(hU<zcj=XW{%Yp6UJ6N@ftUzmC!P5cbt`?6jy? >zkn>j9-;D~v`nZNntt8~9LC7xNOec_RZz1(-9N|5dP=m0v9-_#(n4W^-V2~txiYhzj >z!i$YK*$mpxEQDn<+Gk7q?5d2K>8gc&fN~c@-gEJg62@yGi)KdJFKsVL7OffK1s(gk >zuDvn5Y{BU<F%-%e((qKG8u5Ul%idy$ct({KxR(KBlCq)lwQ%n=>I*USjd;i%YrdEb >z{Sn*_^roe9hCXX0U8@*Tm5}W<;uM1)L8qv|EjeFw?$DQBbYc7Y_+{2Z;0_;OA3x6W >z0PY|Sr^RF&+^N9lo^nJde+0T>e|Q%!CAxA~?GMkwJ^q*@L1D^DW{@@e8aZfW&HlL( >zh^h58`-7ZbHV<zaS+W1w2>0aSI!6vcWNu~EzD%TLWzD`y<i?s$R_yCU8Y@az$o?{s >ztJ8(Yy+rUffV?jfsir=p{xwOCNIQ`VxeF})mt`W=%)g=j#qveyLfcAweUa7TT2Y9% >zj|Z80xYL7JBN#v$SuMm7!T-APcUV_RUG7#w6p(kTFo<b#?tbL$mc9)MbD|J81-xCa >zu1iy(+!eIf8G_WOYv>wDV7Xr)zJ+r5pkj?+g<rb&*<VHdwnQ#%k*B`?n)b<=Z)r8M >z*w%Y?pY@=}iIK&e%yly-p3Gaau$<qAqFp+%WF>S_u|SWDG`g}53&gW~H?kPATZn)^ >z{pHpDF0f_Yc)Al>7VPVTai^XiPQR;MAxJ&d2ec|FrET5HXc}tCS~{7gaV(KcTp<oc >zQD|B7>QZ^Z1TjZ~gu`3RQzOf}P2=}cU|fp)kR|{zS!z=9ML<>z3CM~dAz5JrL$V?W >z4Q^@!)=5xS07+PK!ylVGm5`=3ktPvYvS1MHR5ItZK3>BJtE{TnlF}3mey44O;Kkq6 >ztd@0Ivcj%UvClb}M#-r)(X{Qa==a|U(_!d)YlyiY`vK(N;tTmg{#)cPVxOudoeJ1E >P00000NkvXXu0mjfoHYWE > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-inner-half-size.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-inner-half-size.png >new file mode 100644 >index 0000000000000000000000000000000000000000..e473bf80efc66766cb32ec2cc60244ed37dc1157 >GIT binary patch >literal 180 >zcmV;l089UgP)<h;3K|Lk000e1NJLTq0015U001%w1^@s7JXu?L0001cNkl<Zc-rli >z!4AM62t%pa|Nk<(E?zL=Fq+2^X)3e<nYr61nsxC@Ld$8rPiTZTB&ja&s6as%ZJL|M >z=rOcU${2vp2YUvrojv1iz<}=oKePMm#BU3e)Gz&dnG;ue53v^M#Hf!LH5!*`jH~Z= >iHN+4@%ynW{5626)ITymFxuX~W0000<MNUMnLSTZVu1667 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-outer.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-outer.png >new file mode 100644 >index 0000000000000000000000000000000000000000..82eeace7fc0c4202f79610978ab423e62abf8939 >GIT binary patch >literal 2412 >zcmZ{mdpOg78^=c{EOMMh4qF~6Bd3rFi9{I*a|(^Nvdq~?QjT*?4xw_Itd@FmT1%@; >zkHai-Y6->Aa{4*!H%&eKiag(`-yhHQT+j9WT%Y^CzTeON{@nNL{(P?Mo9&Krl9f@D >z0f9iW&L<o^0NV)yNkF9}fteqx$p(R>O`RQ%dM1nrDqQhOXQ7#ug?V#Sa2fmTSTTg# >zq5n>b3YP6~G}vwrp{7((H(F%s9=vs(d(vdsw5S`*{!`K=^0e|Hs;%}@ZAe9;YhM#o >z_ToaBZbi>ZoPth;c~{8~-g5bm@{$}EyaCQ}|KNtGC?`*cg`T-jp?`3qQTBgZTv?v{ >zsdiqg_=L}TaeDHp)WEMH?m}9l;@m~8p=7pF>!36@MZO>-W1E4=+P#fwf=QndMcXv7 >z8Z8-fF2Q7mdllSkqq$$v5O4Max@#iK>)>}|J2%opy`et}FlLkY$|k=MPb|h-F&GS# >z`yPH&Q53dkQkZ<87kdVuoRE+pLOXW`h4H>u8uuqXC&Rob*li9oo;cl8K)zjxUvIBg >z$)w}LH2k-=iDKc?$`Kh8{tr6}PB1uTuEZnV2}8sH8=6vc={^tU1@E=j4k~YXOGQ|X >zkJ7bc);}A=x!>Q|ZjgqKn<q^%>txci{z1vOpT5iHp(Eo0q?hU&McH@xcJuaJ!&r=t >z?vM4Ew=lmncbCv<w<by^%~!2EMkjjnd54&X#Od#j14r-;{%H*anvq+xT4z&^R~p5` >z!xS#*RhyBq#-3+TSq9ZKkNp)WoXPH4H-m1)g6J1}?lL8tMqKR^6?)~97d2-4DhB+5 >zUdGN1RJ+xB<5yKLk0NkP^&6b`?>%iQg%g%g!y>UhwjyyUTO+MrE;m#Qlfbq|*dc(4 >zZC|6qC(sSHP6V-iNf|!edmH+^^*p7Z*`Fr|qZ;SsTT5vuq{VfH<xT}KU7pO%=gQ-v >zpl}EV2Ej;R3K*TfdooFmy;Lk8A$M$3@V7ALWqa%n93N4h!H9%#CFmf!JRkt3OVQHb >z4OBETnat*91Ne0G$7cc;8XW%MV(Eh}E-|2Hw!aen*h^t9zNtCIQK#4?o8<B4NzKA= >zJ-KtNi74c~C_F{C-09RZX5o7;K}%g#V~>E_u(9E~{{7oy($sRI!r_#kERyw=)upx! >zFkJKpcdtUCXezrquiN45{@FUmzL;55Wac?m%0{3=Y46O}udzZQvI2GYkbbEmgW{O# >zB*tP_1EQvt8AEX}i1ucwo7Do-=J@@}d(C-#{nOcUixx3CVB}<e`Lw}_xWS0LbrOGg >z-0$$Y+G<jqNui?4Zdoxsu$TaOYd=pOXKWEl=;Q$~#Yp}}11wlrY@mF@rT&tjQx2Kc >z;EdG(+Qw=(0gQccTmb_LX#GO@-=ToE{*}o1S&Q<qR$oGG$H$7QsF?VyQgL%mGamZB >zN8AN0>yfx&o9U9a{k9oC*L+CRvNc6NGmAaSr-%G%isWSVX*Ri;gJFYDY61-RZMJ9s >z-`z?*?sVx<BY`>k?ebatm>?cmkvn8n>~gVoVD9PAWg?M?$DhQ9`wq>_JP04nEs0as >zGCYyp$>C%Uz4Sbg-8nx$KQdBELKqs3JZpaXR0kdt6C;QpRUl$8ZN2BT1ay8+QeDwI >zu62>#lKkWL24UmrHRFc%C7-=lR_WXembP{E_3D{)24gRLd3m`56V=JI3W>Gc@|ghD >zM4FnK`Yo)lucxJLsZJ~`ENt|1#h-mVSROoe^Uf(EVVw0btkFTIuq)O|12?%MoRDpA >z2yb%N3pEM(Fd#*y6-Dy|)=~4^T7Ra;qxZn6bJQv8eU-G*cUmx99|SwF1S^VO>?Mcy >ziKu&}Y5&7fzUR%+PBa2D*ec=Nds+$#Hi85rKsnpQ4u~Tuc0eH#V&@ut(`oSm91zDY >za+r0m+14Xz`N-u=du{O&XwC%ls)q~AieIs$nYA?j`i;>+?lE4qb*u__4g0>Wic&zo >zR+V36^t{R_-%yv8wr}-_^1lgZWPfdu3O$yvqYW912-Zu#GoWhgovH3+iIzI{A=E)V >zcQydV*I><E=u_da(q7DH+)<GXMo3AvA=y+6U6e})iPP3*DUDxWlG~X9WJt}Yx1=aW >z9f9!2A{3*A+uM>n-slX6bO6zsU?5t4944(oUP5)GKA$4KLQ4haDC`}{Ps+Ey(|x}` >zyBd9~%hyJlk{^d?Lo)0)dE5l)3+)ni{3Zg_i0Xi|wj6^6BU*ew>BPGjg>hpsG84#F >zFtJR+%|k#s!XCqF_ng1k)XQe2ZTWsnZZ|ncg`BfZy2~e>2r%0X?)0(asHJc|7s;{V >zAyLed^iYKNI1KWOw{~cQNG_eYN!$n`KQ1lw1ky25mK1-sOUN<}du0+Jm-|WOJ}UZk >z;MD^*RM{7)%54F<f89d$AT43&eEZMXjD>{-bX|b)&Pma9Hxh~L<9I*zLO^8O^&sR* >z+Z4@)s8v757MByxkbSog24S(-^4S*wgp`yZd~#%@yPop)OUea1c4?kMp-^sa!(oST >zlOoZRWmaIl?bWsCD++LG;;LvBull2<z%AUo%!0tXV5Zh=aOTXJiC4)n)<ylZJ1#8> >zTKN2P=4FEB_A-kIhbh4*)5)gT&@Gq#)33|s%4+1d`N2!(NL$;9utxEAWYvRMlM?)J >zUGmy09Ze5xzD#Sp`sH(nNMyos$)$75^*zJVnHX>A58rdx9N!z~iBj0<W}FS}{WTSS >zYe(Kh?$^;NgZyZ(TL-Pc;QQJ0!or2b!LYc9i2f%v0)ZgFaP|`7cK3seBhSK1u{4h_ >z@XA$Y?)2*bv%CGWDk&;eV+0`iroein?E{ZT1m@$$KVz-tVqdPbjg5@~%n0G(y?uRF >z>IU6@K0Y6KJQh(%2_L<F(zQbdtgfyO+|gmbe_i?OiRXdC>Z+=$Xf!%}G|=DQ-_LJ; >z{R@v*PI@{ju&;VMdI8E|v)OrCwr%pJojwJ7oSpnX!a|OIC{+5t7cWF27_n5j0g~u3 >VAD}`@1i=3k$k`F)P-h>U`X3Goc2EES > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tl.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tl.png >new file mode 100644 >index 0000000000000000000000000000000000000000..f6ac0ef7e8f6e192c9c26239884bf92b13cf67b8 >GIT binary patch >literal 1025 >zcmV+c1pfPpP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY >zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0 >z|Ns9065r0w00001VoOIv3m@0SzyJUPb4f%&RCwC$mQ8M}Fc5&T!~r@I9HIMngrJ)4 >zQ(^kjbwEn?FN@yb9iWkt>{9_J2)W!F@R;Dg)Lp$zS!5CX;rV991JU){SM-DYAV0|e >zM%uPHwukYjIUJ7B*Q=ZTu2z>QMR^bD+hKK83n7YJaQrDaUiXl8N2@a^ART^^rwFp> >z9#IKgok0Td0KkTyXt?~yXZ<2qM=a7Vzey#Q*6RDnL2!78qHiE=Ex4QTA^lz~J%kTw >zstmq|U|5-t@E~V@SRUkpVNEL-i@q);x>HzkHGJJLeJv;~hO4ub=d-q4IFZka!eTMc >zu`{buHGh%+at79akO>1WhSi7Zh!q^12-bv5K>WppZFh6@Am?f!<BIe8<ZyJvwWFFq >zUcMXE0yolD)G8oeTdi8;=!mNz`J_B*yPwI?M)m~}`KHs5imGL+R7;7ZWotYNJV;A* >zWckKOJq2tdq{0$$(*LL3ZKU7Jv@p{|rJmVH#VIZ=UDrmLfQ3*?VqE$rdu3uFswG*f >z%lCCbgf){JI*%YWuFdgL!bDU{f?kyVyi~}>KvZ5Be|6^zTf#t8UO;S(JZAKN+3ASN >z3j@6)uNUz|&Al}d$_w_F78jlrimN;suUD0qIN$0jWDohucq6MjSV#Rh_J5@Pc!G3f >z_wwM3t6xj|WYw9-AC(uqCDDE%<9fTAh~QL5JzvTmP~Jf3VT_w`oktbsK$-$vb-dY+ >zEip&>4?ZIC^U;m)Hw&SbOn!F;BHM*_pCjsYrK_unjA?=AlYvYnPPY~!(~?^V6%rmz >z<RXVlV(+q3UGZ)qa4U<3RPu9z8&h()Lr7;MvMclhIow%G<k?0tDQT)8vXJ#M5t59J >znRmOBS}sb`n8kPXi@9Ww{-vOHwGp3wv!1nUm_EL5ha0)Qi>kimBF|Bjt{e!>7aIY` >z$e-!kZF!dZ$<~h?Ekqu$Hyc?mW_>Y3_Tv~aU&L~krJRVP<{Xh@#O3lKU&e81AT)VW >z+l8Kn<$pJj%%^`<NBnV^?sG(rO721gjrZ5ir7vt3{7A{<<H{~jA7`ID<MD7X!t_;S >zAdaE>s>@+0W|%%6zicXInEvpcG8HpS|5i+Fr$GIwnD~MX)K@9PlerDlpNfeu>p=af >vm<;kz{V6gHxvP)gcJytThUyO|QzGyW8di!g0nvTM00000NkvXXu0mjfqXF-V > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tr.png b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tr.png >new file mode 100644 >index 0000000000000000000000000000000000000000..59843ae54b64f6ce4f7e616d4be491c911ea84cf >GIT binary patch >literal 1235 >zcmV;^1T6cBP)<h;3K|Lk000e1NJLTq003kF003kJ0{{R3g3O3#0000aP)t-s005aY >zGnr;)nE(LHGc(L)X3UwH%*@QpW@i7Hng7hp|NsC0s-1y@0000CbW%=J|NsC0|NsC0 >z|Ns9065r0w00001VoOIv3m@0SzyJUQMM*?KRCwC$mrYXRI26aFnjFBd+de=qdOt_N >zRTBGjNv4=J5|!QqHQb;NfD32Vom9jLqFiod>%)>Qhp^}!Di#F%(|iB->7dhx5Bfwt >zkx%50BC1n|tx|6vK%_mLQWqnX6K;;U`FDFEg`lc|)m4wlpBK4@05B8)B_V|J%_Vlw >za4<$t6qwQ5?fVe&2b-UQ(B}DF=TLGmWzFWjfTsuoBj{dz2tgQl^A0mb5R|kzAGjHU >zzt-QIvk5};13=E&LB-q-)byMklsg#6^|GA>1kTt&3kTTsQcmN$3rJ$UlvDpmfxi-B >zs(OsZVotq*l2F1pfdVHvT}FC0ny!_MGKlO{^1lTH|7D!$)SEgOs2&9Y@Lbr2kd{<# >zhySTga0aoQC4`TSr6hxqDd{GMq~)Oxf{zHUHg7p3EkeB)qa9pj)F50=N<;4i33kkV >z+Zkfqoh0ngavtIa&CE4aHM11QcA(<ZnS*i}9_-kZ;*#IbkX(ZM7}U-VnO=(WZJ}O6 >zN?{sklqJk*eYL?f(2HA43tsrLxw#P83GW(do-aa9$Cseyd*a!d^}6HVyqYAe5u#PP >zW%Z*kP*_6LlYHvTg7zzOR0H&%9HKkXNYMzhoi|%+O@~02w{IClNzOR!w=8e?lQnb@ >z%pq|-dqh2QW;SdM6#?$Yk>1_eQZqwfj_k!6`W4$RXtT;($sb=Vf=Ltr<fHQ=Orru; >zUn;qEfp&3@JVRc|I^G&)9Ni4A9mSQOHEM$Fe1C)nz8+lD!g*#oEk#T?Ym^*pUDLa@ >zP0fmiPIHK0vlU}q+Y5`}FTpe9;sq1LWPGS!Et$V!6C--}V}{^za7DM=t4WauJA@K$ >zMP={GAs~J}TSO4+Obz2!!c-2PJ^BD}6(L7%qhFFWlm_w*{A_jB&gyf79BgCs?>w9n >z=2B#u(Pr7sL0tWekex*^{dF&8!>RY)KGWH*ffTXTQc}}ioq82%jI{MEgls^5+h<%O >z^>H1Z@tJtBVk*~XX#88aM!5hI=gDs?hBhOj+jXMvWV-~H?(^Z!I&l*r!fNriI&I;K >z<Iv6+Vk^Q0%(qeN5a+0NAxn^9#sT%s+L9uce-sc;vjLIT_kg$%QSX=-v{o_lKqih2 >zSFAju?}mC>UB`|wTQ4r~E*vl-*0C6Qu@PH2eTrR0Wf{T~%Xbknf3wf*S&<+a`6o9M >zz*S7^KKgFY$UnJ0HVgZg8jXfF%*c<rs4-Jtxk{$Dr$zap4viTq<*Snt>L({(KZLbt >zzRNL^s?W;zZP~w5L&>g+M15Ai**#&3n|Wb>4eGP<`;PGlMsC0muRbf^cs3p5##&fh >zIr(FkMaZ}vrt)1Swj2@$kLqXgyORsRw`3xZBX}-f+RL=$<nPGNDtben%J*+U`~KZM >xFqlMZdn&(j3r#(mcWQ87&CEBe=q+_3|9^_Lp+#u>Ntgft002ovPDHLkV1lbeOeO#T > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..15da8626cf655c5b0bf53f4e27c1bdd08237b57c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/w3c-import.log >@@ -0,0 +1,57 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-green.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-lime.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-maroon.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-navy.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-red.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/1x1-white.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-gg-rr.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-green.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/60x60-red.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/README >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/a-green.css >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/b-green.css >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/c-red.css >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/cat.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-green.css >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/import-red.css >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rgr-grg.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-grg-rrg-rgg.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-rgr-grg-rgr.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/pattern-tr.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50%.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-h-50px.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-100px.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/ruler-v-50px.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-purple.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-teal.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/square-white.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-blue.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-green.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-lime.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-orange.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-red.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-teal.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-white.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/swatch-yellow.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-bl.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-br.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-inner-half-size.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-outer.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tl.png >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/support/test-tr.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/ttwf-js-cssomview-getclientrects-length.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/ttwf-js-cssomview-getclientrects-length.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bc873174568c84dd9fb1f83a9515a5a562fc66cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/ttwf-js-cssomview-getclientrects-length.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View API Test: the length of getClientRects</title> >+ <link rel="author" title="simplezeroec" href="mailto:zhaolp0419@gmail.com"> >+ <link rel="help" href="https://www.w3.org/TR/cssom-view/#dom-element-getclientrects"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="getClientRects will return rects of the correct number"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ >+</head> >+<body> >+ <div id="rectcontainer"> >+ <button id="testBtn" >Test</button> >+ <a id="testLink">Test Link</a> >+ </div> >+ <div id="log"></div> >+ <script> >+ >+ test(function(){assert_equals(document.getElementById("rectcontainer").getClientRects().length,1,"1 ClientRects should be returned");},"assert_length_of_getClientRects_from_Parent"); >+ test(function(){assert_equals(document.getElementById("testBtn").getClientRects().length,1,"1 ClientRects should be returned");},"assert_length_of_getClientRects_from_Button"); >+ test(function(){assert_equals(document.getElementById("testLink").getClientRects().length,1,"1 ClientRects should be returned");},"assert_length_of_getClientRects_from_Link"); >+ >+ >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..48c55423a228991bd0887350d8ab278846353586 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/w3c-import.log >@@ -0,0 +1,83 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/CaretPosition-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/DOMRectList.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/GetBoundingRect.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/HTMLBody-ScrollArea_quirksmode.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/MediaQueryList-with-empty-string.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoundingClientRect-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getBoxQuads-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-getClientRects.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-img-attributes-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/cssom-view-window-screen-interface.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-003.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-dynamic-anon-box.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint-parameters.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPoint.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementFromPosition.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementScroll.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-iframes.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-invalid-cases.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-shadowroot.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-simple.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg-text.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-svg.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint-table.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/elementsFromPoint.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/historical.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/htmlelement-offset-width-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/iframe.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/interfaces.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMedia.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/matchMediaAddListener.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/media-query-list-interface.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/mouseEvent.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/negativeMargins.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetParent_element_test.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/offsetTopLeftInScrollableParent.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-behavior-smooth.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scroll-no-layout-box.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollPadding.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-shadow.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-smooth.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollTop-display-change.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeight.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollWidthHeightWhenNotScrollable.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-no-browsing-context.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrolling-quirks-vs-nonquirks.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement-quirks-dynamic-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollingElement.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/scrollintoview.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/ttwf-js-cssomview-getclientrects-length.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-interface.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height-immutable.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width-immutable.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-interface.xht b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-interface.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..163124b6e789fb41271f93902b49c17f688797b8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-interface.xht >@@ -0,0 +1,82 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSSOM Window Test: Properties and Functions</title> >+ <link rel="author" title="Joe Balancio" href="mailto:jlbalancio@gmail.com" /> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface" /> >+ <meta name="flags" content="dom" /> >+ <meta name="assert" content="All properties exist and are readonly. All functions exist and are instances of Function" /> >+ <script src="/resources/testharness.js" type="text/javascript" /> >+ <script src="/resources/testharnessreport.js" type="text/javascript" /> >+ </head> >+ <body> >+ <noscript>Test not run - javascript required.</noscript> >+ <div id="log" /> >+ <script type="text/javascript"><![CDATA[ >+ /* >+ Window Functions >+ */ >+ test( >+ function(){ >+ assert_own_property(window, "matchMedia"); >+ assert_own_property(window, "scroll"); >+ assert_own_property(window, "scrollTo"); >+ assert_own_property(window, "scrollBy"); >+ }, 'window_exposed_functions', { >+ assert: ['window functions are exposed'] >+ } >+ ); >+ >+ test( >+ function(){ >+ assert_true(window.matchMedia instanceof Function); >+ assert_true(window.scroll instanceof Function); >+ assert_true(window.scrollTo instanceof Function); >+ assert_true(window.scrollBy instanceof Function); >+ }, 'window_functions', { >+ assert: ['window functions are instances of Function'] >+ } >+ ); >+ >+ /* >+ Window Properties >+ */ >+ test( >+ function() { >+ assert_own_property(window, 'screen'); >+ assert_own_property(window, 'innerWidth'); >+ assert_own_property(window, 'innerHeight'); >+ assert_own_property(window, 'scrollX'); >+ assert_own_property(window, 'pageXOffset'); >+ assert_own_property(window, 'scrollY'); >+ assert_own_property(window, 'pageYOffset'); >+ assert_own_property(window, 'screenX'); >+ assert_own_property(window, 'screenY'); >+ assert_own_property(window, 'outerWidth'); >+ assert_own_property(window, 'outerHeight'); >+ }, 'window_properties', { >+ assert: ['window properties are owned by window'] >+ } >+ ); >+ test( >+ function() { >+ assert_readonly(window, 'screen'); >+ assert_readonly(window, 'innerWidth'); >+ assert_readonly(window, 'innerHeight'); >+ assert_readonly(window, 'scrollX'); >+ assert_readonly(window, 'pageXOffset'); >+ assert_readonly(window, 'scrollY'); >+ assert_readonly(window, 'pageYOffset'); >+ assert_readonly(window, 'screenX'); >+ assert_readonly(window, 'screenY'); >+ assert_readonly(window, 'outerWidth'); >+ assert_readonly(window, 'outerHeight'); >+ }, 'window_properties_readonly', { >+ assert: ['window properties are readonly'] >+ } >+ ); >+ ]]> >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height-immutable.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height-immutable.html >new file mode 100644 >index 0000000000000000000000000000000000000000..88dd0684816d74a40f7563e90674d517551f4d84 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height-immutable.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 4.2 - screen.height immutability</title> >+ <link rel="author" title="Neils Christoffersen" href="mailto:neils.christoffersen@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="screen.height is immutable"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <script> >+ var originalVal = window.screen.height; >+ >+ // try to set window.screen.height >+ window.screen.height = 0; >+ >+ // verify window.screen.height didn't change >+ test(function() { >+ assert_equals(window.screen.height, originalVal, "window.screen.height should be immutable") >+ }, "immutability test"); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9bb7e528b89fd4b0b4297685fc9e26e0895adbe8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-height.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 4.2 - screen.height range tests</title> >+ <link rel="author" title="Neils Christoffersen" href="mailto:neils.christoffersen@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="window.screen.height has sensible values"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <script> >+ var upperBound = 50000; >+ >+ test( >+ function() { >+ assert_not_equals(window.screen.height, 0, "window.screen.height is zero") >+ }, "zero check" >+ ); >+ >+ test( >+ function() { >+ assert_true(window.screen.height > 0, "window.screen.height shouldn't be negative") >+ }, "positive check" >+ ); >+ >+ test( >+ function() { >+ assert_true(window.screen.height < upperBound, "window.screen.height shouldn't be so large") >+ }, "upper bound check" >+ ); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width-immutable.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width-immutable.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1415bfaca4408ca36e3065f2cc82d5ab0f5b10c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width-immutable.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 4.2 - screen.width immutability</title> >+ <link rel="author" title="Neils Christoffersen" href="mailto:neils.christoffersen@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="screen.width is immutable"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <script> >+ var originalVal = window.screen.width; >+ >+ // try to set window.screen.width >+ window.screen.width = 0; >+ >+ // verify window.screen.width didn't change >+ test(function() { >+ assert_equals(window.screen.width, originalVal, "window.screen.width should be immutable") >+ }, "immutability test"); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fdae2bc742502ee06e2d789a8ef7de283e853e40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom-view/window-screen-width.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <title>CSSOM View - 4.2 - screen.width range tests</title> >+ <link rel="author" title="Neils Christoffersen" href="mailto:neils.christoffersen@gmail.com"> >+ <link rel="help" href="http://www.w3.org/TR/cssom-view/#the-screen-interface"> >+ <meta name="flags" content="dom"> >+ <meta name="assert" content="window.screen.width has sensible values"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ <div id="myDiv"></div> >+ <div id="log"></div> >+ <script> >+ var upperBound = 50000; >+ >+ test( >+ function() { >+ assert_not_equals(window.screen.width, 0, "window.screen.width is zero") >+ }, "zero check" >+ ); >+ >+ test( >+ function() { >+ assert_true(window.screen.width > 0, "window.screen.width shouldn't be negative") >+ }, "positive check" >+ ); >+ >+ test( >+ function() { >+ assert_true(window.screen.width < upperBound, "window.screen.width shouldn't be so large") >+ }, "upper bound check" >+ ); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSS.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSS.html >index 654629bb3286390c468110c1d0036e6f88ee4d42..fd2966a104c0804bc66c0e2b7353d9f03631564d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSS.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSS.html >@@ -2,8 +2,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSS interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-css.escape()-method"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <script> > test(function () { > // https://drafts.csswg.org/cssom/#dom-css-escape >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframeRule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframeRule.html >index 148df18b8f88b91b782c7e694e55166046b23525..3f6d1821867ae42dc2e486597621fb079268e2c0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframeRule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframeRule.html >@@ -2,8 +2,8 @@ > <meta charset="utf-8"> > <title></title> > <link rel="help" href="https://drafts.csswg.org/css-animations/#interface-csskeyframerule"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <style type="text/css" id="styleElement"> > div { animation: 3s slidein; } > @keyframes slidein { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframesRule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframesRule.html >index 4b4b1f054542308124a0e4023137023c8ca5fc99..7d91127d1e022c35aad79715488eab32d4a37a84 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframesRule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSKeyframesRule.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSSKeyframesRule interface</title> > <link rel="help" href="https://drafts.csswg.org/css-animations/#interface-csskeyframesrule"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > @keyframes foo { > 0% { top: 0px; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSNamespaceRule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSNamespaceRule.html >index 632cf6f88cd8ad48cb5fcf60bed150458bf34ebb..fbbaa3c569300ea74ca34637b623c739c566778f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSNamespaceRule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSNamespaceRule.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSSNamespaceRule interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssnamespacerule-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > @namespace svg url(http://servo); > @namespace url(http://servo1); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSRuleList.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSRuleList.html >index e8f53a2d92d9ea34d8248f457157f96649c5141d..4605b7496481e99871f5cc5d3eb164f7033b8d15 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSRuleList.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSRuleList.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSSRuleList interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssrulelist-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > body { width: 50%; } > #foo { height: 100px; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText-namespace.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText-namespace.html >index 73136947ba614a1510d440ec382e87b2b171ab0b..4da0a333e933793763eec0ef95e7a3468a39f23f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText-namespace.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText-namespace.html >@@ -2,8 +2,8 @@ > <meta charset=utf-8> > <title>CSSOM StyleRule selectorText property setter with namespaces</title> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstylerule-selectortext"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > > <style type="text/css" id="styleElement"> > @namespace url(http://www.w3.org/1999/xhtml); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText.html >index e3feb0046833fc09dbbb5f03f92be6a7da06c483..e29db52ec63b6dc0925a71e51c993bf07af5d08e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule-set-selectorText.html >@@ -2,8 +2,8 @@ > <meta charset=utf-8> > <title>CSSOM StyleRule selectorText property setter</title> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstylerule-selectortext"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > > <style type="text/css" id="styleElement"> > .style0 { background-color: rgb(0, 0, 255) !important; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule.html >index 88cfc91ad8c531ce7953f5d63d29bafb4a60c656..3acdfb12852356ac28e91af25c82052d45864b0e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleRule.html >@@ -8,8 +8,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssstylerule-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="All properties for this CSSStyleRule instance of CSSRule are initialized correctly"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > > <style id="styleElement" type="text/css"> > div { margin: 10px; padding: 0px; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleSheet.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleSheet.html >index d0d454e4bf5938733f354b3ba9d52ed11ac27cc1..86016ef5a3db6636bf97edc58992f30f909c13a2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleSheet.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/CSSStyleSheet.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSSStyleSheet interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssstylesheet-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style id="my-stylesheet"> > body { width: 50%; } > #foo { height: 100px; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList.html >index 59fe65753eb9de5d2f92ed2e2d86e55eb6b893d3..8308ee89e4bacea93d438bb85a2481c590a8dfb8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - MediaList interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-medialist-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > @media screen and (min-width: 480px), print, projection {} > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList2.xhtml b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList2.xhtml >index ade0ed944a97ff7814907b4543c5f12bbd04ddb5..73acbdec25c6fc940f4ed8df5210d8c6a608e34e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList2.xhtml >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList2.xhtml >@@ -6,8 +6,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-medialist-interface"/> > <link rel="help" href="http://dev.w3.org/2006/webapi/WebIDL/#getownproperty"/> > <style media="screen, print" id="test-style"></style> >-<script src="../../../../../resources/testharness.js"/> >-<script src="../../../../../resources/testharnessreport.js"/> >+<script src="/resources/testharness.js"/> >+<script src="/resources/testharnessreport.js"/> > </head> > <body> > <div id="log"/> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/StyleSheetList.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/StyleSheetList.html >index 65700522aec62612ee2f82e48c7c150daa759b0e..bb7d2ff4e3e6fb553bb102032a0396ff73528e5a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/StyleSheetList.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/StyleSheetList.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - StyleSheetList interface</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-stylesheetlist-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > body { width: 50%; } > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/at-namespace.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/at-namespace.html >new file mode 100644 >index 0000000000000000000000000000000000000000..04a8a2289aa67e05a359ece1d09d961539d82571 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/at-namespace.html >@@ -0,0 +1,29 @@ >+<!doctype html> >+<title>CSS Test: @namespace in CSSOM is not severely broken</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1464865"> >+<link rel="help" href="https://drafts.csswg.org/cssom/#insert-a-css-rule"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style id="s"> >+ div { color: green } >+</style> >+<div>Should be green</div> >+<script> >+test(function() { >+ assert_throws("InvalidStateError", function() { >+ s.sheet.insertRule('@namespace myhtml url("http://www.w3.org/1999/xhtml")', 0); >+ }); >+ assert_equals(s.sheet.cssRules.length, 1, "Shouldn't have been inserted"); >+ assert_throws("SyntaxError", function() { >+ s.sheet.insertRule("myhtml|div { color: red !important }", 0); >+ }); >+ assert_equals(s.sheet.cssRules.length, 1); >+ assert_equals( >+ getComputedStyle(document.querySelector("div")).color, >+ "rgb(0, 128, 0)", >+ "Namespace shouldn't be registered" >+ ); >+}); >+</script> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-001.html >index c13fd186725b33f08c68ece5a2a9e475d4596947..80bf06c300ec7a693ca74dc98dbf2b62df721aaa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-001.html >@@ -8,8 +8,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#resolved-values"> > <meta name="flags" content="dom"> > <meta name="assert" content="getComputedStyle returns a readonly CSSStyleDeclaration with resolved values"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style> > #outside { > width: 200px; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002-expected.txt >index 904641a1fe37cd0180a63590db6066eca3b62e84..1e043b86dca2ebb67259abc2a7cf372577c13d25 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002-expected.txt >@@ -1,4 +1,4 @@ > > >-PASS Check that a percent width in an iframe is resolved against iframe width for getComputedStyle. >+FAIL Check that a percent width in an iframe is resolved against iframe width for getComputedStyle. undefined is not an object (evaluating 'frm.contentWindow.document') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002.html >index cd7b324ce751a7cd781a79d2dafd3a801edee649..7b31c96c098c21576b09941ef819a8df4e3b1e0c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002.html >@@ -2,8 +2,8 @@ > <title>CSS Test: getComputedStyle - resolved width in iframe</title> > <link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org" /> > <link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values" /> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <iframe id="frm" width="100"></iframe> > <script> > test(() => { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003-expected.txt >index bb1e6de1948192ad9b508473ac0844d950e1a78f..fe339ab888e71953de3916ab60f2c906192ab04c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003-expected.txt >@@ -1,4 +1,4 @@ >+CONSOLE MESSAGE: line 9: TypeError: undefined is not an object (evaluating 'frm.contentWindow.document') > >- >-PASS Check that a percent width in an iframe is the resolved width when the iframe is displayed. >+FAIL CSS Test: getComputedStyle - resolved width in iframe dynamic display TypeError: undefined is not an object (evaluating 'frm.contentWindow.document') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003.html >index c295451dcb568b62ee7fb45b654db9432f4635b7..e73b793b8f3c4d98ca188bd029c40e94dc68df21 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003.html >@@ -2,8 +2,8 @@ > <title>CSS Test: getComputedStyle - resolved width in iframe dynamic display</title> > <link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org" /> > <link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values" /> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <iframe id="frm" width="100" style="display:none"></iframe> > <script> > const frmDoc = frm.contentWindow.document; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004-expected.txt >index 65038c22af0e29c741176536d0ce75efeef7caad..3134adb26de9d8f97e84e2f2a93c94251b3ac1af 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004-expected.txt >@@ -1,5 +1,5 @@ >+CONSOLE MESSAGE: line 9: TypeError: undefined is not an object (evaluating 'outer.contentWindow.document') > > >-PASS Check that the initial width is 100px. >-PASS Check that the resolved width of the inner div is affected by changing the width of outer iframe. >+FAIL CSS Test: getComputedStyle - resolved width in nested iframes dynamic width TypeError: undefined is not an object (evaluating 'outer.contentWindow.document') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004.html >index 4401a2392d33685559ff9a9b8d60c4afd9bc0ccc..c5b08712f96840eb6c8177cda60f8798248fb11b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004.html >@@ -2,8 +2,8 @@ > <title>CSS Test: getComputedStyle - resolved width in nested iframes dynamic width</title> > <link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org" /> > <link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values" /> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <iframe id="outer" width="100" scrolling="no" frameborder="0"></iframe> > <script> > const outerDoc = outer.contentWindow.document; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-set-property.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-set-property.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a5fcc156a38d0350e078af0ab1987c4616eaeada >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-set-property.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE> >+<title>NoModificationAllowedError when mutating read only properties</title> >+<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org"> >+<link rel="help" href="https://www.w3.org/TR/cssom-1/#dom-cssstyledeclaration-setpropertyvalue"> >+<meta name="assert" content="This test verifies that NoModificationAllowedError is thrown when mutating read only properties" /> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body></body> >+<script> >+test(function(t) { >+ assert_equals(document.defaultView.getComputedStyle(document.body, null).parentRule, null); >+}, "Computed style parent (should be null)"); >+ >+test(function(t) { >+ assert_throws("NoModificationAllowedError", function() { >+ document.defaultView.getComputedStyle(document.body, null).color = "blue"; >+ }); >+}, "Exception thrown when trying to change a computed style declaration via property"); >+ >+test(function(t) { >+ assert_throws("NoModificationAllowedError", function() { >+ document.defaultView.getComputedStyle(document.body, null).setProperty("color", "blue"); >+ }); >+}, "Exception thrown when trying to change a computed style declaration via setProperty"); >+ >+test(function(t) { >+ assert_throws("NoModificationAllowedError", function() { >+ document.defaultView.getComputedStyle(document.body, null).webkitTransition = ""; >+ }); >+}, "Exception thrown when trying to change a computed style alias via property"); >+ >+test(function(t) { >+ assert_throws("NoModificationAllowedError", function() { >+ document.defaultView.getComputedStyle(document.body, null).setProperty("webkitTransition", ""); >+ }); >+}, "Exception thrown when trying to change a computed style alias via setProperty"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attr-decl-block.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attr-decl-block.html >index c8c638490a381d0b815282182b182abee6f7d5a2..9b45d66f4ff2fe38ecc0bf8003b5ae17a9ca7722 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attr-decl-block.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attr-decl-block.html >@@ -2,8 +2,8 @@ > <meta charset="UTF-8"> > <link rel="author" title="Xidorn Quan" href="mailto:me@upsuper.org"> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#css-declaration-blocks"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <body> > <script> > function createTestElement(style) { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attribute-modifications.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attribute-modifications.html >index 61de84dbf7540c71dbded7fa664b6e61c4c998dc..524a5adca3c6127038e3f01aa474726d417c0fcf 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attribute-modifications.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attribute-modifications.html >@@ -1,8 +1,8 @@ > <!DOCTYPE html> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:ecobos@igalia.com"> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="test" style="color: red"></div> > <script> > test(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-declaration-modifications.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-declaration-modifications.html >index 26a86e21eb0e42f56d8423e77ed35dbb91adc2a4..4db637d7de9edfa0b037fe434067a199784d36b8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-declaration-modifications.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-declaration-modifications.html >@@ -6,8 +6,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssstyledeclaration-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="CSSStyleDeclaration is properly initialized and can be modified through its interface"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement"> > #test { color: green; } > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-reparse.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-reparse.html >index f3d0dd68466d89ad6fef7299790b3a5fe202a5af..d5153cf2679fa9eb0de6bfcb2eb30afaddd81fa9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-reparse.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-reparse.html >@@ -5,8 +5,8 @@ > <title>CSS Test: DOM modification re-parsing test</title> > <link rel="help" href="https://drafts.csswg.org/cssom/"> > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> >- <script src=../../../../../resources/testharness.js></script> >- <script src=../../../../../resources/testharnessreport.js></script> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> > <style>div { min-width: 0px; }</style> > <style id="style-element"></style> > </head> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssimportrule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssimportrule.html >index 877ad9d0a42c63446aa9a4ddbb336bbfb5507c39..1d7b18f62857dc209c77bfa4aab43e95571298d6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssimportrule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssimportrule.html >@@ -8,8 +8,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssimportrule-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="All properties for this CSSImportRule instance of CSSRule are initialized correctly"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > > <style id="styleElement" type="text/css"> > @import url("support/a-green.css"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssText-serialize.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssText-serialize.html >index cbf656cc311ef83e899eb4141682be669348ec10..27479f026df6b9b2b419f86fcdc0da001ffcbe5b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssText-serialize.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssText-serialize.html >@@ -8,8 +8,8 @@ > <link rel="source" href="http://trac.webkit.org/export/120528/trunk/LayoutTests/fast/css/cssText-cache.html"> > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssstyledeclaration-set.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssstyledeclaration-set.html >index 3648a7799dc0b72091ef8c39ba782c2681930ee7..1fb7ccd32499bb5ee55ce49e1189d6f073212a30 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssstyledeclaration-set.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-cssstyledeclaration-set.html >@@ -8,8 +8,8 @@ > <link rel="source" href="http://trac.webkit.org/export/120528/trunk/LayoutTests/fast/css/cssText-cache.html"> > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule-constructors.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule-constructors.html >index b2fd6dc2fabce215927f8d7f26aef76ca96931d7..d7925215641875859152f33c268c34f4630c356c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule-constructors.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule-constructors.html >@@ -8,8 +8,8 @@ > > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule.html >index 4592061387b1b2715020cdcaf21891480c02f688..9a06808e3ae2a032620642ce2d9a0d42670f1f1a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-fontfacerule.html >@@ -7,8 +7,8 @@ > > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-ruleTypeAndOrder.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-ruleTypeAndOrder.html >index b5e0856a0b66b4d107286e6d897b2a3466d0fadc..19aab35357ce1c52080c69dcba4cf2e885c36a1a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-ruleTypeAndOrder.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-ruleTypeAndOrder.html >@@ -4,8 +4,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="Testing Serialization of Style Rules"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style id="s-0"> > @namespace svg "http://www.w3.org/2000/svg"; > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand-expected.txt >index 97663b57a7e2742c329a59e09d84d91f05e7765c..775dacff861e5f131e8b3a7abb3d9e05e67bf017 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand-expected.txt >@@ -2,77 +2,77 @@ > PASS shorthand font can be set with setProperty > PASS shorthand font can be removed with removeProperty > PASS shorthand font can be set with setProperty and priority !important >-PASS shorthand font can be removed with removeProperty even when set with !important >+FAIL shorthand font can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-top can be set with setProperty > PASS shorthand border-top can be removed with removeProperty > PASS shorthand border-top can be set with setProperty and priority !important >-PASS shorthand border-top can be removed with removeProperty even when set with !important >+FAIL shorthand border-top can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-right can be set with setProperty > PASS shorthand border-right can be removed with removeProperty > PASS shorthand border-right can be set with setProperty and priority !important >-PASS shorthand border-right can be removed with removeProperty even when set with !important >+FAIL shorthand border-right can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-bottom can be set with setProperty > PASS shorthand border-bottom can be removed with removeProperty > PASS shorthand border-bottom can be set with setProperty and priority !important >-PASS shorthand border-bottom can be removed with removeProperty even when set with !important >+FAIL shorthand border-bottom can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-left can be set with setProperty > PASS shorthand border-left can be removed with removeProperty > PASS shorthand border-left can be set with setProperty and priority !important >-PASS shorthand border-left can be removed with removeProperty even when set with !important >+FAIL shorthand border-left can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border can be set with setProperty > PASS shorthand border can be removed with removeProperty > PASS shorthand border can be set with setProperty and priority !important >-PASS shorthand border can be removed with removeProperty even when set with !important >+FAIL shorthand border can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-color can be set with setProperty > PASS shorthand border-color can be removed with removeProperty > PASS shorthand border-color can be set with setProperty and priority !important >-PASS shorthand border-color can be removed with removeProperty even when set with !important >+FAIL shorthand border-color can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-style can be set with setProperty > PASS shorthand border-style can be removed with removeProperty > PASS shorthand border-style can be set with setProperty and priority !important >-PASS shorthand border-style can be removed with removeProperty even when set with !important >+FAIL shorthand border-style can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-width can be set with setProperty > PASS shorthand border-width can be removed with removeProperty > PASS shorthand border-width can be set with setProperty and priority !important >-PASS shorthand border-width can be removed with removeProperty even when set with !important >+FAIL shorthand border-width can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand background-position can be set with setProperty > PASS shorthand background-position can be removed with removeProperty > PASS shorthand background-position can be set with setProperty and priority !important >-PASS shorthand background-position can be removed with removeProperty even when set with !important >+FAIL shorthand background-position can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand background-repeat can be set with setProperty > PASS shorthand background-repeat can be removed with removeProperty > PASS shorthand background-repeat can be set with setProperty and priority !important >-PASS shorthand background-repeat can be removed with removeProperty even when set with !important >+FAIL shorthand background-repeat can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-spacing can be set with setProperty > PASS shorthand border-spacing can be removed with removeProperty > PASS shorthand border-spacing can be set with setProperty and priority !important >-PASS shorthand border-spacing can be removed with removeProperty even when set with !important >+FAIL shorthand border-spacing can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand list-style can be set with setProperty > PASS shorthand list-style can be removed with removeProperty > PASS shorthand list-style can be set with setProperty and priority !important >-PASS shorthand list-style can be removed with removeProperty even when set with !important >+FAIL shorthand list-style can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand margin can be set with setProperty > PASS shorthand margin can be removed with removeProperty > PASS shorthand margin can be set with setProperty and priority !important >-PASS shorthand margin can be removed with removeProperty even when set with !important >+FAIL shorthand margin can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand outline can be set with setProperty > PASS shorthand outline can be removed with removeProperty > PASS shorthand outline can be set with setProperty and priority !important >-PASS shorthand outline can be removed with removeProperty even when set with !important >+FAIL shorthand outline can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand padding can be set with setProperty > PASS shorthand padding can be removed with removeProperty > PASS shorthand padding can be set with setProperty and priority !important >-PASS shorthand padding can be removed with removeProperty even when set with !important >+FAIL shorthand padding can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand background can be set with setProperty > PASS shorthand background can be removed with removeProperty > PASS shorthand background can be set with setProperty and priority !important >-PASS shorthand background can be removed with removeProperty even when set with !important >+FAIL shorthand background can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand overflow can be set with setProperty > PASS shorthand overflow can be removed with removeProperty > PASS shorthand overflow can be set with setProperty and priority !important >-PASS shorthand overflow can be removed with removeProperty even when set with !important >+FAIL shorthand overflow can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > PASS shorthand border-radius can be set with setProperty > PASS shorthand border-radius can be removed with removeProperty > PASS shorthand border-radius can be set with setProperty and priority !important >-PASS shorthand border-radius can be removed with removeProperty even when set with !important >+FAIL shorthand border-radius can be removed with removeProperty even when set with !important assert_true: can setPropertyValue with shorthand expected true got false > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand.html >index cdff9a941c2a48398eff626871569d3e798373b4..4c0f9a2f9392bd8e85c2d092db382fcc0cc06c2e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssom-setProperty-shorthand.html >@@ -8,8 +8,8 @@ > <link rel="source" href="http://trac.webkit.org/export/120528/trunk/LayoutTests/fast/css/cssom-remove-shorthand-property.html"> > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-final-delimiter.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-final-delimiter.html >index d6ec9ff7ee6c171ddee02b8ded05cc61732447cf..01b0a32c3fe2739f70377d7673b54a5fa7c50d61 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-final-delimiter.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-final-delimiter.html >@@ -5,8 +5,8 @@ > <link rel="author" title="Glenn Adams" href="mailto:glenn@skynav.com"/> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface"/> > <meta name="flags" content="dom"/> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="box"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-important.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-important.html >index 07935c845403da93636abd3ef209269f31ca5e53..c12faf63a435903c908e8d0ecc6af5be94b8ab02 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-important.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-important.html >@@ -1,7 +1,7 @@ > <title>CSSOM test: setting a property with cssText and !important</title> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstyledeclaration-csstext"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="box"></div> > <script> > var style = document.getElementById('box').style; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext.html >index 1284df3e003271967942f23f717777c725634dee..c3ad37ae2a66a06a90ab713547cb58d60fd2f5e4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext.html >@@ -7,8 +7,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstyledeclaration-csstext"> > <meta name="assert" content="CSS declarations is serialized as expected"> > <meta name="flags" content="dom"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="log"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutability.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutability.html >index 2661793f3283a9dcbf60698a4b26fbdbbb242840..6b4c78f7190941a61904360f548003c6cc6c9ec4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutability.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutability.html >@@ -8,8 +8,8 @@ > > <meta name="flags" content="dom"> > >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-001.html >index 2df90c7194bec34f8ea276ffd4b4a85edd33b64d..5bd8456ed7032f034b3cda18a8cd11ab070f5ab0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-001.html >@@ -4,8 +4,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setpropertyvalue"> > <link rel="help" href="https://drafts.csswg.org/cssom/#update-style-attribute-for"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <script> > document.documentElement.style.top = "0px"; > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-002.html >index 3b8aa2dfa49b42585b66f8ccf89223042fe6b5c0..1cdb41a18145556f5cdc7b992d3f7d9dd0cb0f94 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-002.html >@@ -3,8 +3,8 @@ > <title>CSSOM: CSSStyleDeclaration.setPropertyValue doesn't queue a mutation record for invalid values</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setpropertyvalue"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <script> > let test = async_test("CSSStyleDeclaration.setPropertyValue doesn't queue a mutation record when setting invalid values"); > let m = new MutationObserver(test.unreached_func("shouldn't queue a mutation record")); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-003.html >index da74fac38eb9b0e60591d0de3ee8943f7de5c869..7a99dfc645db2313423af3307860065b2204d4d0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-003.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-003.html >@@ -3,8 +3,8 @@ > <title>CSSOM: CSSStyleDeclaration.removeProperty doesn't queue a mutation record when not actually removed, invoked from setPropertyValue</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setpropertyvalue"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <script> > let test = async_test("CSSStyleDeclaration.removeProperty doesn't queue a mutation record when not actually removed, invoked from setPropertyValue"); > document.documentElement.style.top = "0"; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-004.html >index 8e7d308c890fc6065816aed8040c9816a4751b06..55956dfdaaec3457de3f5d6a608c2a0b5345e84d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-mutationrecord-004.html >@@ -3,8 +3,8 @@ > <title>CSSOM: CSSStyleDeclaration.removeProperty doesn't queue a mutation record when not actually removed</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setpropertyvalue"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <script> > let test = async_test("CSSStyleDeclaration.removeProperty doesn't queue a mutation record when not actually removed"); > document.documentElement.style.top = "0"; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-setter-order.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-setter-order.html >index 8480c8b864eb36c6d75c95038e59b400fbe2565c..702b38fef061c497f25fd095da9b5280f2d8959f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-setter-order.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-setter-order.html >@@ -1,8 +1,8 @@ > <!DOCTYPE html> > <title>CSSOM test: order of declarations after setting via CSSOM</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#set-a-css-declaration-value"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="log"></div> > <script> > function generateCSSDeclBlock(props) { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/escape.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/escape.html >index 6e9a16a2ab30c6e84175252ecf599e0cd897d534..115e2c86a9a0d8e1ea7465ecf5143a42e1104c85 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/escape.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/escape.html >@@ -2,8 +2,8 @@ > <meta charset=utf-8> > <title>CSS#escape</title> > <link rel=help href=https://drafts.csswg.org/cssom-1/#the-css.escape()-method> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <div id=log></div> > <script> > test(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/font-shorthand-serialization.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/font-shorthand-serialization.html >index b372175b28a43c0d4028ea3eeb3b257ec1d67cdf..a56c204876f1f0f45c3aadd837b0b9e135e98814 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/font-shorthand-serialization.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/font-shorthand-serialization.html >@@ -3,8 +3,8 @@ > <meta charset="utf-8"> > <title>Serialization of font shorthand</title> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#serialize-a-css-declaration-block"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="target" style="font: 10px/1 Ahem;"></div> > <script> > test(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html >index a715bf5d44b8ad4d0c877ecb17205e5a02c9ab2f..1cbb92a466ed2f9215ca5a6ee26d4a6ef79191ef 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html >@@ -3,8 +3,8 @@ > <title>CSSOM: getComputedStyle returns no style for elements not in the tree</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <div id="host"> > <div id="non-slotted"> > <div id="non-slotted-descendant"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-dynamic-subdoc.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-dynamic-subdoc.html >index 46d91320d19d88f3983ec80d9282131d96fd934b..aa49dc33ef79a6f8d6e7e1051d963708e05e7622 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-dynamic-subdoc.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-dynamic-subdoc.html >@@ -3,8 +3,8 @@ > <title>CSSOM: getComputedStyle cross-doc properly reflects media query changes</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <iframe id="frm" style="width: 100px; height: 100px"></iframe> > <script> > test(function() { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo.html >index f95341a489717cb724b257abe079b582d0a5e6bb..f5a637a7d314d18d4cca535bfde113b06c9b93f9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-pseudo.html >@@ -4,8 +4,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-window-getcomputedstyle"> > <link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values"> > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <style> > #test { width: 100px; } > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical-expected.txt >index f4341dea16ad0477ac703201003c8e04591742fe..0b59c5e1614c6b2ac53c4e7c2ec7669e337b1fdd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical-expected.txt >@@ -4,8 +4,16 @@ PASS Historical Document member: lastStyleSheetSet > PASS Historical Document member: preferredStyleSheetSet > PASS Historical Document member: styleSheetSets > PASS Historical Document member: enableStyleSheetsForSet >-PASS Historical Document member: selectedStylesheetSet >-PASS Historical Document member: preferredStylesheetSet >+FAIL Historical Document member: selectedStylesheetSet assert_false: expected false got true >+FAIL Historical Document member: preferredStylesheetSet assert_false: expected false got true >+FAIL Historical interface: Rect assert_false: expected false got true >+FAIL Historical interface: RGBColor assert_false: expected false got true >+FAIL Historical interface: CSSValue assert_false: expected false got true >+FAIL Historical interface: CSSPrimitiveValue assert_false: expected false got true >+FAIL Historical interface: CSSValueList assert_false: expected false got true >+FAIL Historical CSSStyleDeclaration member: getPropertyCSSValue assert_false: expected false got true >+PASS Historical CSSStyleDeclaration member: setPropertyValue >+PASS Historical CSSStyleDeclaration member: setPropertyPriority > PASS Historical Element member: cascadedStyle > PASS Historical Element member: defaultStyle > PASS Historical Element member: rawComputedStyle >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical.html >index 496c7d13cb9459502506b357d7cecfd1681ed6c6..44f3f6c8f15a13b2c32dad2672ea9383330e8082 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/historical.html >@@ -1,8 +1,8 @@ > <!DOCTYPE html> > <title>Historical features</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#changes-from-5-december-2013"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id=log></div> > <script> > [ >@@ -22,6 +22,28 @@ > }, "Historical Document member: " + name); > }); > >+[ >+ "Rect", >+ "RGBColor", >+ "CSSValue", >+ "CSSPrimitiveValue", >+ "CSSValueList", >+].forEach(function(name) { >+ test(function() { >+ assert_false(name in window); >+ }, "Historical interface: " + name); >+}); >+ >+[ >+ "getPropertyCSSValue", >+ "setPropertyValue", >+ "setPropertyPriority", >+].forEach(function(name) { >+ test(function() { >+ assert_false(name in document.body.style); >+ }, "Historical CSSStyleDeclaration member: " + name); >+}); >+ > [ > "cascadedStyle", > "defaultStyle", >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/inline-style-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/inline-style-001.html >index 0d8485410bc26af3fa5fceac33cd39325586e7c1..51f36f250e5c10cec7f08f5aa1a2de989d90bfd8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/inline-style-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/inline-style-001.html >@@ -6,8 +6,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#elementcssinlinestyle"> > <meta name="flags" content="dom"> > <meta name="assert" content="Inline CSSStyleDeclaration is properly initialized and can be modified through its interface"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > </head> > <body> > <noscript>Test not run - javascript required.</noscript> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-charset-no-index.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-charset-no-index.html >index dfa19595e8ec44be7012b47f84211eea79426a1d..16f2358dc2d806de878bf2a1403aec9e6c41d9bd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-charset-no-index.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-charset-no-index.html >@@ -6,8 +6,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/"> > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <link rel="stylesheet" type="text/css" href="support/import-charset.css" id="linkElement" > > </head> > <body> >@@ -19,7 +19,7 @@ > sheet.insertRule("p { color: green; }"); > assert_equals(sheet.cssRules.length, 1); > assert_equals(sheet.cssRules.item(0).cssText, "p { color: green; }"); >- }, "inserRule with charset and omitted index argument"); >+ }, "insertRule with charset and omitted index argument"); > > test(function() { > assert_equals(sheet.cssRules.length, 1); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-import-no-index.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-import-no-index.html >index 39e340d7db1f03a9b93ec8707a360866f1d9da54..ad3622f86aaa4dfd58ee18015d1ef8dd1ebd6a70 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-import-no-index.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-import-no-index.html >@@ -6,8 +6,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/"> > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement"> > @import url("support/a-green.css"); > </style> >@@ -20,7 +20,7 @@ > assert_equals(sheet.cssRules.length, 1); > assert_throws("HierarchyRequestError", function() { sheet.insertRule("p { color: green; }"); }); > assert_equals(sheet.cssRules.length, 1); >- }, "inserRule with import and omitted index argument"); >+ }, "insertRule with import and omitted index argument"); > > test(function() { > assert_equals(sheet.cssRules.length, 1); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-namespace-no-index.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-namespace-no-index.html >index 4e4286d5268231e571cb2ad20a91884df4e586dd..c1628eed85f9f6350d41f5653440af0c78578f51 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-namespace-no-index.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-namespace-no-index.html >@@ -6,8 +6,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/"> > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement"> > @namespace svg url(http://servo); > @namespace url(http://servo1); >@@ -22,7 +22,7 @@ > assert_equals(sheet.cssRules.length, 3); > assert_throws("HierarchyRequestError", function() { sheet.insertRule("p { color: green; }"); }); > assert_equals(sheet.cssRules.length, 3); >- }, "inserRule with namespace and omitted index argument"); >+ }, "insertRule with namespace and omitted index argument"); > > test(function() { > assert_equals(sheet.cssRules.length, 3); >@@ -34,7 +34,7 @@ > assert_equals(sheet.cssRules.length, 3); > sheet.insertRule("@import url(\"support/a-green.css\");"); > assert_equals(sheet.cssRules.length, 4); >- }, "inserRule with namespace and omitted index argument should insert import"); >+ }, "insertRule with namespace and omitted index argument should insert import"); > </script> > </body> > </html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-no-index.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-no-index.html >index 89b930e29932104ab15551e63216f1ed11a74578..b4370bd080cf95073d3cccece85372f77ba18ef2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-no-index.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-no-index.html >@@ -6,8 +6,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/"> > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement"> > /* An initial style rule to test where the new rule is inserted relative to this one */ > nosuchelement { color: red; } >@@ -22,7 +22,7 @@ > sheet.insertRule("p { color: green; }"); > assert_equals(sheet.cssRules.length, 2); > assert_equals(sheet.cssRules.item(0).cssText, "p { color: green; }"); >- }, "inserRule with omitted index argument"); >+ }, "insertRule with omitted index argument"); > > test(function() { > assert_equals(sheet.cssRules.length, 2); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-syntax-error-01.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-syntax-error-01.html >index 6ccaed8304ca23620989436a34802dd6dd120661..170213c8badbcddda70b2313902fa7c21a757333 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-syntax-error-01.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/insertRule-syntax-error-01.html >@@ -1,7 +1,7 @@ > <!DOCTYPE html> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#insert-a-css-rule"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <style> > p { color: green; } > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/interfaces.html >index 49264c19aaad71befbd6962d2b1d3953531d6b13..da598838bde6441b31ff46dcbcfc82fa413de9fa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/interfaces.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/interfaces.html >@@ -4,8 +4,8 @@ > <title>CSSOM automated IDL tests</title> > <link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> > <link rel="help" href="https://drafts.csswg.org/cssom-1/#idl-index"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <script src=/resources/WebIDLParser.js></script> > <script src=/resources/idlharness.js></script> > <!-- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-001.html >index efdb7a9d952f0078481c86b98005fe3b8e0fe141..19c661e1b3dffa1f30d9886346317879063ae0d4 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-001.html >@@ -7,8 +7,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-medialist-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="MediaLists are serialized according to the specification"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > </head> > <body> > <noscript>Test not run - javascript required.</noscript> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-002.html >index 0df587b95294e6ab4b9d5e68a6973b64d4df2b8d..679adc37ee5fb7c8041e9fced1cb08f353002cde 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-002.html >@@ -7,8 +7,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#the-medialist-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="MediaList object has deleteMedium method and it functions properly."> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-003.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-003.html >index 72def18cabcca6550e9d4727bcc167d93a698a13..649f9485f44f800b7685d604ac31c88ce43e4d81 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-003.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-003.html >@@ -7,8 +7,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#serializing-media-queries"> > <meta name="flags" content="dom"> > <meta name="assert" content="Media Queries are serialized according to the specification"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > </head> > <body> > <noscript>Test not run - javascript required.</noscript> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-004.html >index 8c7ba6921509384531773f9ce414b0e9a18f4e6c..cf9befb8ffb628f59508d5d74ec6ed4db9e4e09e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-004.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/medialist-interfaces-004.html >@@ -6,8 +6,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-medialist-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="MediaList object has appendMedium method and it functions properly."> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > </head> > > <body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/overflow-serialization.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/overflow-serialization.html >index 7b01568a715782bc900701d004d4ce935641a8f4..136b8aba117eb64403700d8c4348db085cede9c8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/overflow-serialization.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/overflow-serialization.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - Overflow shorthand serialization</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-value"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style> > div { overflow: inherit; } > div { overflow: hidden; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-order.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-order.html >index 3231a7e711569357a1cc76a84200da8a3b69c3b3..dc990131ab39cd451b5cfced3464690c5ef1a802 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-order.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-order.html >@@ -2,8 +2,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#add-a-css-style-sheet"> > <link rel="help" href="https://drafts.csswg.org/cssom/#create-a-css-style-sheet"> > <link rel="help" href="https://html.spec.whatwg.org/#update-a-style-block"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="t1">This text should be green</div> > <script> > function createStyleElement(text, title) { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-reversed-order.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-reversed-order.html >index 839ecafb6faf170da4a2987f9b7d8137b024cc00..ff3a8b09010cdb220fe5bf6661ae380a7fe2c267 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-reversed-order.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/preferred-stylesheet-reversed-order.html >@@ -2,8 +2,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#add-a-css-style-sheet"> > <link rel="help" href="https://drafts.csswg.org/cssom/#create-a-css-style-sheet"> > <link rel="help" href="https://html.spec.whatwg.org/#update-a-style-block"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="t1">This text should be green</div> > <script> > function createStyleElement(text, title) { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorSerialize.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorSerialize.html >index d171a9da94e22af018ffb5f182f99362b5c0e4cb..e95f453ba1c9494d5ff9bc3a602217106fc5174a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorSerialize.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorSerialize.html >@@ -7,8 +7,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom-1/#serializing-selectors"> > <meta name="flags" content="dom"> > <meta charset="utf-8"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style id="teststyles"> > </style> > </head> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorText-modification-restyle-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorText-modification-restyle-002.html >index 8ad4825b7f9a7a65f8140f99fd0a7231627c5d85..a6b37c2cf0a62228f9bac52eea3f21cbed46db10 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorText-modification-restyle-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/selectorText-modification-restyle-002.html >@@ -3,8 +3,8 @@ > <link rel="author" title="Rune Lillesveen" href="mailto:futhark@chromium.org"> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstylerule-selectortext"> > <link rel="help" href="https://drafts.csswg.org/css-scoping/#selectors"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <style> > #container { color: red } > .subtree * { color: pink } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialization-CSSDeclaration-with-important.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialization-CSSDeclaration-with-important.html >index 642973bed569da7d3555e0de9284bca7f1ee4838..804885a74a17f23e18f4c073099c26b2e9f80532 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialization-CSSDeclaration-with-important.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialization-CSSDeclaration-with-important.html >@@ -2,8 +2,8 @@ > <meta charset=utf-8> > <title>cssom - Serialization of CSS declaration with "important" flag</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-declaration"> >-<script src=../../../../../resources/testharness.js></script> >-<script src=../../../../../resources/testharnessreport.js></script> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> > <div id="noWhitespace" style="display: inline !important;"></div> > <div id="whitespace" style="background-color: blue !important; color: red ! important;"></div> > <div id="dinamicallyStyle"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-namespaced-type-selectors.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-namespaced-type-selectors.html >index 65b667d49e0280f654ef41b55e5cecd1da2d77ee..600008c7a9eb7351b15ede25b870525882b32a0c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-namespaced-type-selectors.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-namespaced-type-selectors.html >@@ -6,8 +6,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom-1/#serializing-selectors"> > <meta name="flags" content="dom"> > <meta charset="utf-8"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > <style id="teststyles"> > </style> > </head> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt >index 372047759b48e9ca414ef953b23cf0eae40caa6d..36796b366c69bd3eabe69b2ffa5daf853d0e078d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values-expected.txt >@@ -8,8 +8,8 @@ PASS background-color: rgb(50, 75, 100) > FAIL background-color: rgba(5, 7, 10, 0.5) assert_equals: background-color raw inline style declaration expected "rgba(5, 7, 10, 0.5)" but got "rgba(5, 7, 10, 0.498039)" > PASS background-color: transparent > PASS background-color: inherit >-PASS background-image: url("http://localhost/") >-PASS background-image: url(http://localhost/) >+FAIL background-image: url("http://localhost/") assert_equals: background-image raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" >+FAIL background-image: url(http://localhost/) assert_equals: background-image raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" > PASS background-image: none > PASS background-image: inherit > PASS background-position: 5% 5% >@@ -317,8 +317,8 @@ PASS content: normal > PASS content: none > FAIL content: "string" assert_equals: content raw inline style declaration expected "\"string\"" but got "string" > FAIL content: 'string' assert_equals: content raw inline style declaration expected "\"string\"" but got "string" >-PASS content: url("http://localhost/") >-PASS content: url(http://localhost/) >+FAIL content: url("http://localhost/") assert_equals: content raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" >+FAIL content: url(http://localhost/) assert_equals: content raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" > FAIL content: counter(par-num) assert_equals: content raw inline style declaration expected "counter(par-num)" but got "counter(par-num, decimal)" > FAIL content: counter(par-num, decimal) assert_equals: content raw inline style declaration expected "counter(par-num)" but got "counter(par-num, decimal)" > PASS content: counter(par-num, upper-roman) >@@ -440,8 +440,8 @@ PASS line-height: .1em > PASS line-height: 5% > PASS line-height: .5% > PASS line-height: inherit >-PASS list-style-image: url("http://localhost/") >-PASS list-style-image: url(http://localhost/) >+FAIL list-style-image: url("http://localhost/") assert_equals: list-style-image raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" >+FAIL list-style-image: url(http://localhost/) assert_equals: list-style-image raw inline style declaration expected "url(\"http://localhost/\")" but got "url(http://localhost/)" > PASS list-style-image: none > PASS list-style-image: inherit > PASS list-style-position: inside >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values.html >index 1b02f754da88cfe3655ff70b7a26e5442c778127..7334424a0a1e638856e4bdbf5eb95f9e2cecf268 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-values.html >@@ -3,8 +3,8 @@ > <title>CSSOM serialize values</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#serializing-css-values"> > <meta name="author" title="Josh Matthews" href="mailto:josh@joshmatthews.net"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <body> > <div id="log"></div> > <div id="parent"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-variable-reference.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-variable-reference.html >index 30eeca986d0e77734341d04319100e3ad32198df..2b7e23ba6923b8a09bf7ad7620e99763a7382215 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-variable-reference.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/serialize-variable-reference.html >@@ -3,8 +3,8 @@ > <title>CSSOM - Serialization with variable preserves original serialization.</title> > <link rel="help" href="https://drafts.csswg.org/css-variables/#serializing-custom-props"> > <link rel="help" href="https://drafts.csswg.org/css-variables/#variables-in-shorthands"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="longhand-whitespace" style="font-size: var(--a);"></div> > <div id="shorthand-whitespace" style="font: var(--a);"></div> > <div id="longhand" style="font-size:var(--a);"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/setproperty-null-undefined.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/setproperty-null-undefined.html >index c1d51629933c26ccf19fb6bef1e06af281a8e7cd..3de142c0b46dde2722bcf18386c6ca9154372488 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/setproperty-null-undefined.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/setproperty-null-undefined.html >@@ -2,8 +2,8 @@ > <html> > <head> > <link rel="help" href="https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty"/> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > </head> > <body> > <script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-serialization.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-serialization.html >index 095f0a4553a1212796a06546d9af5abec568953f..2178ba37a959fc56537c7cc164d423d14563881f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-serialization.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-serialization.html >@@ -5,8 +5,8 @@ > <title>Shorthand serialization should be done correctly.</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-declaration-block"> > <link rel="help" href="https://drafts.csswg.org/css-variables/#variables-in-shorthands"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="foo1" style="background: red;">foo</div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-values.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-values.html >index db11320ad5aaceda963f7eaae09550d42447210f..d8d7f5349a4561cb4d764f366236e88eb3775c8f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-values.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/shorthand-values.html >@@ -5,8 +5,8 @@ > <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-declaration-block"> > <meta name="flags" content="dom"> > <meta name="assert" content="Testing Serialization of Shorthand Values"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="test"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-001.html >index 12f4bd81ecdc925a429c28a84074d5b18be6f31a..20dc9713e58b05a159ef731164889fc37b4b02aa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-001.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-001.html >@@ -6,8 +6,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#css-style-sheets"> > <meta name="flags" content="dom"> > <meta name="assert" content="StyleSheet and CSSStyleSheet objects have the properties specified in their interfaces"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement" type="text/css" media="all" title="internal style sheet" disabled="disabled"> > @import url('support/a-green.css'); > * { margin: 0; padding: 0; } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-002.html >index a09f5862fa25312552270145511ac9dce5a4fb59..5ff1117435439d7b04c693d8f1843cc439dc578f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-002.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/style-sheet-interfaces-002.html >@@ -8,8 +8,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="StyleSheet and CSSStyleSheet objects have the properties specified in their interfaces"> >- <script src="../../../../../resources/testharness.js" type="text/javascript"></script> >- <script src="../../../../../resources/testharnessreport.js" type="text/javascript"></script> >+ <script src="/resources/testharness.js" type="text/javascript"></script> >+ <script src="/resources/testharnessreport.js" type="text/javascript"></script> > <style id="styleElement" type="text/css" media="all" title="internal style sheet" disabled="disabled"> > * { margin: 0; padding: 0; } > </style> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-same-origin.sub.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-same-origin.sub.html >index 4611eebf82e8072a2ad93dcb8a54de41c07b90d6..ccfbf7cec2c26c9eb2da26604ddb0763b70f6d8d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-same-origin.sub.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-same-origin.sub.html >@@ -4,8 +4,8 @@ > <meta charset="utf-8"> > <title>CSSOM - CSSStylesheet should support origins</title> > <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssstylesheet-interface"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > > <link id="crossorigin" href="http://www1.{{host}}:{{ports[http][1]}}/stylesheet-same-origin.css" rel="stylesheet"> > <link id="sameorigin" href="stylesheet-same-origin.css" rel="stylesheet"> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-title.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-title.html >index 8c6f86a8f0e48119fda70fa5f96802864398d45d..77b1df9677a8f772a2c4171de1ed56431b0474e0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-title.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/stylesheet-title.html >@@ -4,8 +4,8 @@ > <link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> > <link rel="help" href="https://drafts.csswg.org/cssom/#preferred-css-style-sheet-set-name"> > <link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-style-title"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <style></style> > <style title=""></style> > <style title="Preferred"> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-count.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-count.html >index 24c5dcd7c289ee8c77b71eb8b41c123a163a9ae9..5296aa3a8bcb6c48ddd5214b3e33e4e3c6703c20 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-count.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-count.html >@@ -9,8 +9,8 @@ > <link rel="stylesheet" href="stylesheet.css" type="text/css"> > <meta name="flags" content="dom"> > <meta name="assert" content="The styleSheets length attribute must reflect the number of sheets at page load and after dynamically"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="log"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-tree-order.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-tree-order.html >index 8ea75099b83f325fe8ebe0c27f65dafa3696fe5a..795ead02f4b2598d037c6d059f303f020c3d5d20 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-tree-order.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-doc-ext-load-tree-order.html >@@ -15,8 +15,8 @@ > <link title="zebra" rel="stylesheet" href="/directory01/zebra.css" type="text/css"> > <meta name="flags" content="dom"> > <meta name="assert" content="Document's style sheets created from HTTP Link headers are first in list and loaded in header order"> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="log"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-document-extension.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-document-extension.html >index 33260ac5070505d0e52c8ef04bcdbe96cbd3f040..5d968b90283cce1c77e894a6231814554501c102 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-document-extension.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/ttwf-cssom-document-extension.html >@@ -8,8 +8,8 @@ > <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-stylesheetlist-interface"> > <meta name="flags" content="dom"> > <meta name="assert" content="The styleSheets attribute must return a StyleSheetList sequence representing the document style sheets."> >- <script src="../../../../../resources/testharness.js"></script> >- <script src="../../../../../resources/testharnessreport.js"></script> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> > </head> > <body> > <div id="log"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/variable-names.html b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/variable-names.html >index 50f60ea322dea1dd8023ddb14c44af6ac0fef50b..5591411e6e5a04a8dbf6a312cfea95babbe59788 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/variable-names.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/variable-names.html >@@ -3,8 +3,8 @@ > <title>Tests for handling of CSS Custom Property names</title> > <link rel="help" href="https://drafts.csswg.org/css-variables/#serializing-custom-props"> > <meta name="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au"> >-<script src="../../../../../resources/testharness.js"></script> >-<script src="../../../../../resources/testharnessreport.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> > <div id="log"></div> > <script> > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/w3c-import.log >index 8997dcfd2a2abb1fb5cb982b41ac5fe282e3623e..d81f44150c64fa90d6b49890ad3d449f9e698b19 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/cssom/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/cssom/w3c-import.log >@@ -27,10 +27,12 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/MediaList2.xhtml > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/StyleSheetList.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom/at-namespace.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-003.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/cssom/computed-style-set-property.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attr-decl-block.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-attribute-modifications.html > /LayoutTests/imported/w3c/web-platform-tests/css/cssom/css-style-declaration-modifications.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/geometry/interfaces-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/css/geometry/interfaces-expected.txt >index c899a3189b84833295d754cb04f41d96606d58e2..64106333b2cdca12a579c645a49edcc2fa02bc0a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/geometry/interfaces-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/geometry/interfaces-expected.txt >@@ -152,17 +152,17 @@ PASS DOMRectReadOnly interface: new DOMRect() must inherit property "bottom" wit > PASS DOMRectReadOnly interface: new DOMRect() must inherit property "left" with the proper type > PASS DOMRectReadOnly interface: new DOMRect() must inherit property "toJSON()" with the proper type > PASS Test default toJSON operation of DOMRect >-PASS DOMRectList interface: existence and properties of interface object >-PASS DOMRectList interface object length >-PASS DOMRectList interface object name >-PASS DOMRectList interface: existence and properties of interface prototype object >-PASS DOMRectList interface: existence and properties of interface prototype object's "constructor" property >-PASS DOMRectList interface: existence and properties of interface prototype object's @@unscopables property >-PASS DOMRectList interface: attribute length >+FAIL DOMRectList interface: existence and properties of interface object assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface object length assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface object name assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface: existence and properties of interface prototype object assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing >+FAIL DOMRectList interface: attribute length assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing > PASS Unscopable handled correctly for length property on DOMRectList >-PASS DOMRectList interface: operation item(unsigned long) >+FAIL DOMRectList interface: operation item(unsigned long) assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing > PASS Unscopable handled correctly for item(unsigned long) on DOMRectList >-PASS DOMRectList must be primary interface of [object DOMRectList] >+FAIL DOMRectList must be primary interface of [object DOMRectList] assert_own_property: self does not have own property "DOMRectList" expected property "DOMRectList" missing > PASS Stringification of [object DOMRectList] > PASS DOMRectList interface: [object DOMRectList] must inherit property "length" with the proper type > PASS DOMRectList interface: [object DOMRectList] must inherit property "item(unsigned long)" with the proper type >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-001.xht b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-001.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..ae8736e9d4b6242544f40fcd1919aa59e7d6264f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-001.xht >@@ -0,0 +1,21 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>Basic media queries test</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/media/queries/001.html"/> >+ <link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#media0"/> >+ <style type="text/css"><![CDATA[ >+ @media only screen { >+ .a, .b { color: green; } >+ } >+ @media not only screen { >+ .b { color: red; } >+ } >+ ]]></style> >+ </head> >+ <body> >+ <p class="a"> This line should be green. </p> >+ <p class="b"> This line should be green. </p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-002.xht b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-002.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..756600a6ad786fae8b5868d997b7eb176d3632d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-002.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>The 'width' media feature (for visual devices with desktop viewport widths)</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/media/queries/002.html"/> >+ <link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#width"/> >+ <style type="text/css"><![CDATA[ >+ @media screen and (width) { .a { color: green; } } >+ @media screen and (min-width: 1em) { .b { color: green; } } >+ @media screen and (max-width: 1000000em) { .c { color: green; } } >+ ]]></style> >+ </head> >+ <body> >+ <p class="a"> This line should be green. </p> >+ <p class="b"> This line should be green. </p> >+ <p class="c"> This line should be green. </p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-003.xht b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-003.xht >new file mode 100644 >index 0000000000000000000000000000000000000000..85c285acad7faa4115f7e4ea1297176ff2736b3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-003.xht >@@ -0,0 +1,19 @@ >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>The 'color' media feature (for color devices with bit depth less than 4096 bits per pixel)</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/media/queries/003.html"/> >+ <link rel="help" href="https://www.w3.org/TR/css3-mediaqueries/#color"/> >+ <style type="text/css"><![CDATA[ >+ @media screen and (color) { .a { color: green; } } >+ @media screen and (min-color: 1) { .b { color: green; } } >+ @media screen and (max-color: 4096) { .c { color: green; } } >+ ]]></style> >+ </head> >+ <body> >+ <p class="a"> This line should be green. </p> >+ <p class="b"> This line should be green. </p> >+ <p class="c"> This line should be green. </p> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html >index c7b651d96c3e2bf11730df60de42bd9aac539ba4..57830f4d47fd6504144f600e4d3d5a7404cd87b0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html >@@ -348,8 +348,16 @@ function run() { > expression_should_be_parseable(feature + ": 3.0dpi"); > expression_should_be_parseable(feature + ": 3.4dpi"); > expression_should_be_parseable(feature + "\t: 120dpcm"); >+ expression_should_be_parseable(feature + ": 1dppx"); >+ expression_should_be_parseable(feature + ": 1x"); >+ expression_should_be_parseable(feature + ": 1.5dppx"); >+ expression_should_be_parseable(feature + ": 1.5x"); >+ expression_should_be_parseable(feature + ": 2.0dppx"); >+ // TODO(emilio): Doesn't seem right to exclude 0 here. > expression_should_not_be_parseable(feature + ": 0dpi"); > expression_should_not_be_parseable(feature + ": -3dpi"); >+ expression_should_not_be_parseable(feature + ": 0dppx"); >+ expression_should_not_be_parseable(feature + ": 0x"); > } > > // Find the resolution using max-resolution >@@ -370,6 +378,8 @@ function run() { > if (query_applies("(min-resolution: " + resolution + "dpi)")) { > // It's exact! > should_apply("(resolution: " + resolution + "dpi)"); >+ should_apply("(resolution: " + Math.floor(resolution/96) + "dppx)"); >+ should_apply("(resolution: " + Math.floor(resolution/96) + "x)"); > should_not_apply("(resolution: " + (resolution + 1) + "dpi)"); > should_not_apply("(resolution: " + (resolution - 1) + "dpi)"); > dpi_high = resolution + 1; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e3f1c95d66fcd89bdce9fc08e31e798df3053e32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic-expected.html >@@ -0,0 +1,9 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test Reference</title> >+<link rel="author" href="mailto:emilio@crisal.io"> >+<meta name="viewport" content="width=300"> >+<style> >+p { color: green; } >+</style> >+<p>Should be green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic.html b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d0dcc57df64657936c5249047b999b7ce1b29fd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: Meta viewport after a script and stylesheets</title> >+<link rel="author" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1424878"> >+<link rel="help" href="https://drafts.csswg.org/mediaqueries/#mf-dimensions"> >+<link rel="match" href="viewport-script-dynamic-ref.html"> >+<style> >+p { color: green; } >+/* Ensure that we initially match it, and stop matching it afterwards */ >+@media (min-width: 310px) { >+ p { >+ color: red; >+ } >+} >+</style> >+<!-- The broken script below is the point of the test, see the bugzilla bug. --> >+<script src="intentionally-broken-url.js"></script> >+<meta name="viewport" content="width=300"> >+<p>Should be green</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/w3c-import.log >index 30f146c1d182226fcd9a3175591c5b211eecb09d..226e3698ea8985834d43d32d069dbc5a8d48ec37 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/w3c-import.log >@@ -35,6 +35,9 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/device-aspect-ratio-005.html > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/device-aspect-ratio-006-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/device-aspect-ratio-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-001.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-002.xht >+/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/media-queries-003.xht > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/min-width-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/min-width-001.xht > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/min-width-tables-001-expected.xht >@@ -66,3 +69,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/relative-units-004-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/relative-units-004.html > /LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html >+/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/viewport-script-dynamic.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/CHANGES b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/CHANGES >new file mode 100644 >index 0000000000000000000000000000000000000000..681a56f9158803526ff6f1f672b2f466d311829f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/CHANGES >@@ -0,0 +1,241 @@ >+Since the 3 June 2009 release, the following tests have changed: >+ >+Removed tests: >+ css3-modsel-d5 - :indeterminate >+ css3-modsel-d5a - :indeterminate and :checked >+ css3-modsel-d5b - NEGATED :indeterminate and :checked >+ css3-modsel-d5c - :indeterminate and :checked >+ css3-modsel-d5d - :indeterminate with :checked >+ css3-modsel-d5e - NEGATED :indeterminate with :checked >+ :indeterminate is not part of Selectors Level 3 >+ >+------------------------------------------------------------------------ >+Since the 7 March 2006 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-184a - Ends-wth attribute selector with empty value >+ css3-modsel-184b - Starts-with attribute selector with empty value >+ css3-modsel-184c - Contains attribute selector with empty value >+ css3-modsel-184d - NEGATED ends-with attribute selector with empty value >+ css3-modsel-184e - NEGATED starts-with attribute selector with empty value >+ css3-modsel-184f - NEGATED contains attribute selector with empty value >+ Tests to verify that attribute selectors with empty values don't match >+ >+Removed tests: >+ css3-modsel-40 - ::selection pseudo-element >+ css3-modsel-162 - Contextual ::selection >+ css3-modsel-164 - :focus with ::selection >+ css3-modsel-165 - :hover with ::selection >+ ::selection has been removed from Selectors Level 3 >+ >+------------------------------------------------------------------------ >+Since the 19 October 2005 release, the following tests have changed: >+ >+Modified tests: >+ css3-modsel-6 - Attribute value selector >+ Removed confusing prose and made it a simple pass criteria. >+ >+ css3-modsel-18 - :hover pseudo-class >+ Removed test of border-spacing. >+ >+ css3-modsel-39a - ::first-letter pseudo-element with ::before pseudo-element >+ css3-modsel-39c - ::first-letter pseudo-element with ::before pseudo-element >+ Changed from background-color to color. >+ >+ css3-modsel-161 - Syntax and parsing of unknown pseudo-classes and pseudo-elements >+ Added the metadata making this test an interactive test. >+ >+ css3-modsel-d5 - :indeterminate >+ css3-modsel-d5a - :indeterminate and :checked >+ css3-modsel-d5d - :indeterminate with :checked >+ css3-modsel-d5e - NEGATED :indeterminate with :checked >+ Changed so that UAs that do not support styling of form controls >+ can still pass these tests if they support combinators (mark II). >+ >+ css3-modsel-d1b - Dynamic handling of :empty >+ Updated to test what the spec actually says (oops). >+ >+Removed tests: >+ css3-modsel-180 - ::first-letter on inlines >+ We changed the spec so that first-letter doesn't apply to >+ inlines, but we don't want to just reverse the test since we want >+ to allow :first-letter to apply to inlines in future. >+ >+ >+------------------------------------------------------------------------ >+Since the 3 October 2005 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-27a - Impossible rules (:root:firstchild, etc) >+ css3-modsel-27b - Impossible rules (* html, * :root) >+ A test to verify there are no elements above the root element. >+ >+------------------------------------------------------------------------ >+Since the 16 December 2004 release, the following tests have changed: >+ >+Modified tests: >+ css3-modsel-15c - Multiple IDs >+ css3-modsel-d3 - Dynamic handling of attribute selectors >+ Fixed typos in script. >+ >+ css3-modsel-70 - NEGATED :checked pseudo-class >+ css3-modsel-d5b - NEGATED :indeterminate and :checked >+ css3-modsel-d5c - :indeterminate and :checked >+ css3-modsel-d5e - NEGATED :indeterminate with :checked >+ Changed so that UAs that do not support styling of form controls >+ can still pass these tests if they support combinators. >+ >+ css3-modsel-66 - NEGATED :target pseudo-class >+ Changed colours so it is less misleading on non-supporting UAs. >+ >+ css3-modsel-39b - ::first-letter pseudo-element >+ css3-modsel-39 - ::first-letter pseudo-element >+ css3-modsel-39a - ::first-letter pseudo-element with ::before pseudo-element >+ css3-modsel-39c - ::first-letter pseudo-element with ::before pseudo-element >+ Made their "very long paragraphs" actually be long. >+ >+ css3-modsel-84 - :contains() pseudo-class >+ css3-modsel-85 - NEGATED :contains() pseudo-class >+ Made text less misleading about the pass condition. >+ >+Removed tests: >+ css3-modsel-19a - :active pseudo-class on blocks >+ This test tested something that the spec did not specify. >+ >+ css3-modsel-84 - :contains() pseudo-class >+ css3-modsel-84b - :contains() pseudo-class >+ css3-modsel-85 - NEGATED :contains() pseudo-class >+ css3-modsel-163 - Contextual :contains >+ Removed since :contains() was removed. >+ >+------------------------------------------------------------------------ >+Since the 10 May 2004 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-15c - Multiple IDs >+ A test that checks if UAs support multiple IDs on the same >+ element. Requires two or more of XHTML, xml:id, and DOM3 Core >+ support. See also the comment in the test itself. >+ >+Modified tests: >+ css3-modsel-90 - Simple combination of direct and indirect adjacent combinators >+ css3-modsel-d3 - Dynamic handling of attribute selectors >+ css3-modsel-15b - Multiple ID selectors >+ Changed to remove false-negative results in some of the test >+ harnesses. >+ >+ css3-modsel-25 - :checked pseudo-class >+ Changed so that UAs that do not support styling of form controls >+ can still pass this test if they support combinators. >+ >+ css3-modsel-162 - Contextual ::selection >+ Made the pass condition slightly clearer. >+ Fixed the control test to disable styling of all text in that section. >+ >+ All tests involving namespace attributes >+ Fixed the generating script so that the tests involving >+ attributes once again have their namespace prefixes declared. >+ >+------------------------------------------------------------------------ >+Since the 21 April 2004 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-183 - Syntax and parsing of class selectors >+ Some more detailed tests for error handling issues known to be >+ broken in some UAs. >+ >+Modified tests: >+ css3-modsel-14b - More than one class selector >+ Expanded the test to catch a few more potential bugs. >+ >+ css3-modsel-153 - :empty pseudo-class and CDATA >+ css3-modsel-150 - :empty pseudo-class and XML/SGML constructs >+ Updating :empty tests to match agreed (if as yet unpublished) >+ errata. >+ >+------------------------------------------------------------------------ >+Since the 2 March 2004 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-42a - :after pseudo-element >+ css3-modsel-41a - :before pseudo-element >+ >+Removed tests: >+ css3-modsel-12 - Default attribute value >+ css3-modsel-58 - Default attribute value and negation pseudo-class >+ These tests no longer apply since UAs are now allowed to assume >+ attribute defaulting or to ignore it, basically at will. >+ >+Modified tests: >+ css3-modsel-23 - :enabled pseudo-class >+ css3-modsel-24 - :disabled pseudo-class >+ css3-modsel-28 - :nth-child() pseudo-class >+ css3-modsel-28b - :nth-child() pseudo-class >+ css3-modsel-29 - :nth-last-child() pseudo-class >+ css3-modsel-29b - :nth-last-child() pseudo-class >+ css3-modsel-32 - :first-child pseudo-class >+ css3-modsel-33 - :last-child pseudo-class >+ css3-modsel-68 - NEGATED :enabled pseudo-class >+ css3-modsel-69 - NEGATED :disabled pseudo-class >+ css3-modsel-73 - NEGATED :nth-child() pseudo-class >+ css3-modsel-73b - NEGATED :nth-child() pseudo-class >+ css3-modsel-74 - NEGATED :nth-last-child() pseudo-class >+ css3-modsel-74b - NEGATED :nth-last-child() pseudo-class >+ css3-modsel-77 - NEGATED :first-child pseudo-class >+ css3-modsel-77b - NEGATED :first-child pseudo-class >+ css3-modsel-78 - NEGATED :last-child pseudo-class >+ css3-modsel-78b - NEGATED :last-child pseudo-class >+ css3-modsel-87 - Nondeterministic matching of direct and indirect adjacent combinators >+ css3-modsel-87b - Nondeterministic matching of direct and indirect adjacent combinators >+ css3-modsel-88 - Nondeterministic matching of descendant and direct adjacent combinators >+ css3-modsel-88b - Nondeterministic matching of descendant and direct adjacent combinators >+ css3-modsel-90 - Simple combination of direct and indirect adjacent combinators >+ css3-modsel-90b - Simple combination of direct and indirect adjacent combinators >+ css3-modsel-d1 - NEGATED Dynamic handling of :empty >+ css3-modsel-d1b - NEGATED Dynamic handling of :empty >+ css3-modsel-d2 - Dynamic handling of combinators >+ css3-modsel-d3 - Dynamic handling of attribute selectors >+ css3-modsel-d4 - Dynamic updating of :first-child and :last-child >+ css3-modsel-d5 - :indeterminate >+ css3-modsel-d5a - :indeterminate and :checked >+ css3-modsel-d5b - NEGATED :indeterminate and :checked >+ css3-modsel-d5c - :indeterminate and :checked >+ css3-modsel-d5d - :indeterminate with :checked >+ css3-modsel-d5e - NEGATED :indeterminate with :checked >+ (and some others depending on the test format) >+ Fixed minor standards compliance issues. >+ >+ All the non-namespaced XHTML tests >+ Removed some extraneous namespace declarations that made the >+ tests invalid. >+ >+------------------------------------------------------------------------ >+Since the 15 September 2003 release, the following tests have changed: >+ >+New tests: >+ css3-modsel-3a - Universal selector (no namespaces) >+ css3-modsel-18a - :hover pseudo-class on links >+ css3-modsel-18c - :hover pseudo-class on links >+ css3-modsel-19a - :active pseudo-class on blocks >+ css3-modsel-19b - :active pseudo-class on controls >+ css3-modsel-179 - ::first-line on inlines >+ css3-modsel-179a - ::first-line after <br> >+ css3-modsel-180 - ::first-letter on inlines >+ css3-modsel-180a - ::first-letter after <br> >+ css3-modsel-181 - Case sensitivity >+ css3-modsel-182 - Namespaces and \: in selectors >+ >+Modified tests: >+ css3-modsel-21c - :target pseudo-class >+ Fixed to match spec errata. >+ >+ css3-modsel-98 - Attribute value selector with declared namespace >+ Added a test to make sure the attribute selectors work without quotes. >+ >+ css3-modsel-161 - Syntax and parsing of unknown pseudo-classes and pseudo-elements >+ Added more tests and split up the existing test to catch more possible errors. >+ >+ css3-modsel-44 - Child combinator >+ Stylesheet used the wrong property name. >+ >+------------------------------------------------------------------------ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/Makefile b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/Makefile >new file mode 100644 >index 0000000000000000000000000000000000000000..210118befd5f2bbae42bfe3f5d0a3f81d57ccb72 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/Makefile >@@ -0,0 +1,52 @@ >+############################################################################## >+# W3C Test Suite Generator # >+############################################################################## >+ >+## Variables >+ >+DESTINATION_TYPES=$(shell perl generate.pl -v DESTINATION_TYPES) >+SHELL_TYPES=$(shell perl generate.pl -v SHELL_TYPES) >+TEST_TYPES=$(shell perl generate.pl -v TEST_TYPES) >+SOURCE=$(shell ls *.xml) >+STYLESHEETS=dist/style/tng.css $(shell perl -e 'foreach $$a (qw($(DESTINATION_TYPES))) { print "dist/style/$$a-full.css\ndist/style/$$a-shell.css\n"; }') >+ >+ >+## Main Targets >+ >+all: directories cache $(STYLESHEETS) dist/.htaccess dist/CHANGES >+ >+directories: Makefile generate.pl utils/* >+ -rm -rf dist/ >+ -rm cache >+ perl -e 'foreach $$a (qw($(DESTINATION_TYPES))) { print `mkdir -p dist/$$a/tests\n`; foreach $$b (qw($(TEST_TYPES))) { print `mkdir -p dist/$$a/$$b/flat\n`; foreach $$c (qw($(SHELL_TYPES))) { print `mkdir -p dist/$$a/$$b/$$c\n`; } } }' >+ mkdir -p dist/style >+ touch directories >+ >+cache: $(SOURCE) >+ perl generate.pl $? >+ >+ >+## Support Files >+ >+# (not mentioned in 'all' as there is no README) >+dist/README: README.dist >+ cp README.dist dist/README >+ >+dist/CHANGES: CHANGES >+ cp CHANGES dist/CHANGES >+ >+dist/style/%.css: %.css >+ cp $< $@ >+ >+dist/.htaccess: htaccess >+ cp htaccess dist/.htaccess >+ >+## Phony Targets >+ >+.PHONY: all clean >+clean: >+ -rm -rf dist/ >+ -rm directories >+ -rm cache >+ >+############################################################################## >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/README b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/README >new file mode 100644 >index 0000000000000000000000000000000000000000..06016f638ba053c6c4ac7a04c3fb37995b80c4a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/README >@@ -0,0 +1,27 @@ >+The format is: >+ >+ <csstest xmlns="http://www.example.org/css3tests" >+ def="<put the title of the test here>" >+ module="W3C Selectors" >+ modulename="css3-modsel" >+ number="<put your initials here>-<give each test a unique number>" >+ rev="1.0" >+ date="1-january-1979 <edit the date keeping the format>"> >+ <author><!-- Put your name here --></author> >+ <cssrules> >+ /* put the rules here */ >+ </cssrules> >+ <code> >+ <p xmlns="http://www.w3.org/1999/xhtml"> Put the test here. </p> >+ </code> >+ </csstest> >+ >+ >+You can also use a special <restrict> element in elements in the <code> >+element, as in: >+ >+ <test:restrict xmlns:test="http://www.example.org/css3tests" for="xml xhtml"> >+ ... >+ </test:restrict> >+ >+See test -d2 for an example. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/TODO b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/TODO >new file mode 100644 >index 0000000000000000000000000000000000000000..f504110bf143df8b2de742cbf8356b4093481581 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/TODO >@@ -0,0 +1,13 @@ >+Some things that need testing: >+ :nth-child(2n+3) >+ :nth-child(2n-2) >+ :nth-child(2n-3) >+ :nth-child(-2n+1) >+ :nth-child(-1n+6) >+ :nth-child(-2) >+ :nth-child(-2n-2) >+ :nth-child(-n-2) >+ summary file >+ >+See also: >+ http://www.w3.org/mid/40B8E7FA.3040409@mit.edu >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/anplusb-selector-parsing.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/anplusb-selector-parsing.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b7cfd293515b67d5aa66bfe7b62262e1b64c0942 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/anplusb-selector-parsing.html >@@ -0,0 +1,76 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Selectors: Test parsing of an+b selectors</title> >+ <link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-child-pseudo"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-child-pseudo"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-of-type-pseudo"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-of-type-pseudo"> >+ <meta charset="utf-8"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style id="teststyles"> >+ </style> >+ </head> >+ <body> >+ <script> >+ function add_selector_style(source) { >+ var style_element = document.getElementById("teststyles"); >+ style_element.firstChild.data = source + "{ font-size: 1em; }"; >+ return style_element.sheet; >+ } >+ >+ function assert_selector_serializes_to(source, expected_result) { >+ test(function() { >+ var sheet = add_selector_style(source); >+ assert_equals(sheet.cssRules[0].selectorText, expected_result); >+ }, source + " should be parsed and serialized correctly"); >+ } >+ >+ function assert_invalid_selector(source) { >+ test(function() { >+ var sheet = add_selector_style(source); >+ assert_equals(sheet.cssRules[0], undefined); >+ }, source + " should not parse"); >+ } >+ >+ function run_tests_on_anplusb_selector(source) { >+ assert_selector_serializes_to(source + '(1n+0)', source + '(n)'); >+ assert_selector_serializes_to(source + '(n+0)', source + '(n)'); >+ assert_selector_serializes_to(source + '(n)', source + '(n)'); >+ assert_selector_serializes_to(source + '(-n+0)', source + '(-n)'); >+ assert_selector_serializes_to(source + '(-n)', source + '(-n)'); >+ assert_selector_serializes_to(source + '(N)', source + '(n)'); >+ assert_selector_serializes_to(source + '(+n+3)', source + '(n+3)'); >+ assert_selector_serializes_to(source + '( +n + 7 )', source + '(n+7)'); >+ assert_selector_serializes_to(source + '( N- 123)', source + '(n-123)'); >+ assert_selector_serializes_to(source + '(n- 10)', source + '(n-10)'); >+ assert_selector_serializes_to(source + '(-n\n- 1)', source + '(-n-1)'); >+ assert_selector_serializes_to(source + '( 23n\n\n+\n\n123 )', source + '(23n+123)'); >+ >+ assert_invalid_selector(source + '(n- 1 2)'); >+ assert_invalid_selector(source + '(n-b1)'); >+ assert_invalid_selector(source + '(n-+1)'); >+ assert_invalid_selector(source + '(n-1n)'); >+ assert_invalid_selector(source + '(-n -b1)'); >+ assert_invalid_selector(source + '(-1n- b1)'); >+ assert_invalid_selector(source + '(-n-13b1)'); >+ assert_invalid_selector(source + '(-n-+1)'); >+ assert_invalid_selector(source + '(-n+n)'); >+ assert_invalid_selector(source + '(+ 1n)'); >+ assert_invalid_selector(source + '( n +12 3)'); >+ assert_invalid_selector(source + '( 12 n )'); >+ assert_invalid_selector(source + '(+12n-0+1)'); >+ assert_invalid_selector(source + '(+12N -- 1)'); >+ assert_invalid_selector(source + '(+12 N )'); >+ assert_invalid_selector(source + '(+ n + 7)'); >+ } >+ >+ run_tests_on_anplusb_selector(':nth-child'); >+ run_tests_on_anplusb_selector(':nth-last-child'); >+ run_tests_on_anplusb_selector(':nth-of-type'); >+ run_tests_on_anplusb_selector(':nth-last-of-type'); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b5407429be803d9b774c4ca0108318fbd6e5134f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001-expected.html >@@ -0,0 +1,10 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS test reference</title> >+<link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> >+<style> >+ span { color: green; } >+</style> >+<body> >+ <a></a><span>This should be green</span> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e84989fd0c27089a821e36145cebfc1423d1b03d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS test: Handling of dynamic changes to :any-link selectors</title> >+<link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu"> >+<link rel="match" href="any-link-dynamic-001-ref.html"> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/#the-any-link-pseudo"> >+<style> >+ span { color: green; } >+ :any-link + span { color: red; } >+</style> >+<body onload="window.oldColor = getComputedStyle(document.querySelector('span')).color; >+ document.querySelector('a').removeAttribute('href');"> >+ <a href=""></a><span>This should be green</span> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5c01e3cc78e55736a27c06098d9a4d200e229316 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html >@@ -0,0 +1,59 @@ >+<!doctype html> >+<title>Selectors: CSSOM of case-sensitivity attribute selector</title> >+<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+function new_sheet(use_media) { >+ var style = document.getElementsByTagName('style')[0]; >+ if (style) >+ style.parentNode.removeChild(style); >+ style = document.createElement('style'); >+ document.head.appendChild(style); >+ if (use_media) { >+ style.textContent = '@media all {}'; >+ return style.sheet.cssRules[0]; >+ } >+ return style.sheet; >+} >+ >+var tests = [ >+ // test input, expected serialization >+ ['[foo="bar"] /* sanity check */', '[foo="bar"]'], >+ ['[foo="bar" i]', '[foo="bar" i]'], >+ ['[foo="bar" /**/ i]', '[foo="bar" i]'], >+ ['[foo="bar"/**/i]', '[foo="bar" i]'], >+] >+ >+tests.forEach(function(arr) { >+ var input = arr[0]; >+ var expected = arr[1]; >+ ["", " in @media"].forEach(function(use_media) { >+ test(function() { >+ var sheet = new_sheet(use_media); >+ sheet.insertRule(input + ' {}', 0); >+ assert_equals(sheet.cssRules.length, 1); >+ }, input + ' insertRule' + use_media); >+ >+ test(function() { >+ var sheet = new_sheet(use_media); >+ sheet.insertRule(input + ' {}', 0); >+ assert_equals(sheet.cssRules[0].cssText.substr(0, expected.length), expected); >+ }, input + ' getting CSSRule#cssText' + use_media); >+ >+ test(function() { >+ var sheet = new_sheet(use_media); >+ sheet.insertRule(input + ' {}', 0); >+ assert_equals(sheet.cssRules[0].selectorText, expected); >+ }, input + ' getting CSSStyleRule#selectorText' + use_media); >+ >+ test(function() { >+ var sheet = new_sheet(use_media); >+ sheet.insertRule('foobar {}', 0); >+ sheet.cssRules[0].selectorText = input; >+ assert_equals(sheet.cssRules[0].selectorText, expected); >+ }, input + ' setting CSSStyleRule#selectorText' + use_media); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b6c3dfe4ea0abdb9d2b99fb01d3adc22e963cbdb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html >@@ -0,0 +1,4 @@ >+<style></style> >+<script> >+var mode = "quirks mode"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml >new file mode 100644 >index 0000000000000000000000000000000000000000..f4d40fb852b1f37258768c0fb7f43070d84d6e22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml >@@ -0,0 +1,10 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+<style></style> >+</head> >+<body> >+<script> >+var mode = "XML"; >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4606419b31c47f3b052ca2ef6930e8bf64d07a5b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html >@@ -0,0 +1,5 @@ >+<style></style> >+<div id=test foo="BAR"></div> >+<script> >+var mode = "quirks mode"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml >new file mode 100644 >index 0000000000000000000000000000000000000000..19491c94c46a4b537673e402f5e310c4f4f210d3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml >@@ -0,0 +1,11 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+<style></style> >+</head> >+<body> >+<div id="test" foo="BAR"/> >+<script> >+var mode = "XML"; >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..d29c6936ab6e634182ef52655bf9b31786bb5f71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/w3c-import.log >@@ -0,0 +1,20 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/semantics-xml.xhtml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-quirks.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/resources/syntax-xml.xhtml >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/semantics.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/semantics.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6b04fb517accfa8feca1b910c0fb5077702828a2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/semantics.html >@@ -0,0 +1,147 @@ >+<!doctype html> >+<title>Selectors: semantics of case-sensitivity attribute selector</title> >+<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style></style> >+<div id=log></div> >+<iframe id="quirks" src="resources/semantics-quirks.html"></iframe> >+<iframe id="xml" src="resources/semantics-xml.xhtml"></iframe> >+<script> >+setup({explicit_done:true}); >+var match = [ >+ // [selector, attrs...] (each attr is [ns, name, value]) >+ ["[foo='BAR'] /* sanity check (match) */", ["", "foo", "BAR"]], >+ ["[foo='bar' i]", ["", "foo", "BAR"]], >+ ["[foo='' i]", ["", "foo", ""]], >+ ["[foo='a\u0308' i] /* COMBINING in both */", ["", "foo", "A\u0308"]], >+ ["[foo='A\u0308' i] /* COMBINING in both */", ["", "foo", "a\u0308"]], >+ ["[*|foo='bar' i]", ["", "foo", "x"], ["a", "foo", "x"], ["b", "foo", "BAR"], ["c", "foo", "x"]], >+ ["[*|foo='bar' i]", ["", "foo", "BAR"], ["a", "foo", "x"], ["b", "foo", "x"], ["c", "foo", "x"]], >+ ["[align='left' i]", ["", "align", "LEFT"]], >+ ["[align='LEFT' i]", ["", "align", "left"]], >+ ["[class~='a' i]", ["", "class", "X A B"]], >+ ["[class~='A' i]", ["", "class", "x a b"]], >+ ["[id^='a' i]", ["", "id", "AB"]], >+ ["[id$='A' i]", ["", "id", "xa"]], >+ ["[lang|='a' i]", ["", "lang", "A-B"]], >+ ["[lang*='A' i]", ["", "lang", "xab"]], >+ ["[*|lang='a' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "A"]], >+ ["[*|lang='A' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]], >+ ["@namespace x 'http://www.w3.org/XML/1998/namespace'; [x|lang='A' i]", ["http://www.w3.org/XML/1998/namespace", "lang", "a"]], >+ ["[foo='bar' i][foo='bar' i]", ["", "foo", "BAR"]], >+ ["[foo='BAR'][foo='bar' i]", ["", "foo", "BAR"]], >+ ["[foo='bar' i][foo='BAR']", ["", "foo", "BAR"]], >+]; >+var nomatch = [ >+ ["[missingattr] /* sanity check (no match) */", ["", "foo", "BAR"]], >+ ["[foo='' i]", ["", "foo", "BAR"]], >+ ["[foo='\u0000' i] /* \\0 in selector */", ["", "foo", ""]], >+ ["[foo='' i] /* \\0 in attribute */", ["", "foo", "\u0000"]], >+ ["[foo='\u00E4' i]", ["", "foo", "\u00C4"]], >+ ["[foo='\u00C4' i]", ["", "foo", "\u00E4"]], >+ ["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00C4"]], >+ ["[foo~='a\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00E4"]], >+ ["[foo^='A\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00C4"]], >+ ["[foo$='A\u0308' i] /* COMBINING in selector */", ["", "foo", "\u00E4"]], >+ ["[foo*='\u00E4' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]], >+ ["[foo|='\u00E4' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]], >+ ["[foo='\u00C4' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]], >+ ["[foo='\u00C4' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]], >+ ["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "a"]], >+ ["[foo='a\u0308' i] /* COMBINING in selector */", ["", "foo", "A"]], >+ ["[foo='A\u0308' i] /* COMBINING in selector */", ["", "foo", "a"]], >+ ["[foo='A\u0308' i] /* COMBINING in selector */", ["", "foo", "A"]], >+ ["[foo='a' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]], >+ ["[foo='A' i] /* COMBINING in attribute */", ["", "foo", "a\u0308"]], >+ ["[foo='a' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]], >+ ["[foo='A' i] /* COMBINING in attribute */", ["", "foo", "A\u0308"]], >+ ["[foo='i' i]", ["", "foo", "\u0130"]], >+ ["[foo='i' i]", ["", "foo", "\u0131"]], >+ ["[foo='I' i]", ["", "foo", "\u0130"]], >+ ["[foo='I' i]", ["", "foo", "\u0131"]], >+ ["[foo='\u0130' i]", ["", "foo", "i"]], >+ ["[foo='\u0131' i]", ["", "foo", "i"]], >+ ["[foo='\u0130' i]", ["", "foo", "I"]], >+ ["[foo='\u0131' i]", ["", "foo", "I"]], >+ ["[foo='bar' i]", ["", "foo", "x"], ["a", "foo", "BAR"]], >+ ["[|foo='bar' i]", ["", "foo", "x"], ["a", "foo", "BAR"]], >+ ["[foo='bar' i]", ["", "FOO", "bar"]], >+ ["[foo='\t' i] /* tab in selector */", ["", "foo", " "]], >+ ["[foo=' ' i] /* tab in attribute */", ["", "foo", "\t"]], >+ ["@namespace x 'a'; [x|foo='' i]", ["A", "foo", ""]], >+ ["@namespace x 'A'; [x|foo='' i]", ["a", "foo", ""]], >+ ["[foo='bar' i][foo='bar']", ["", "foo", "BAR"]], >+ ["[foo='bar' i]", ["", "baz", "BAR"]], >+]; >+var mode = "standards mode"; >+function format_attrs(attrs) { >+ var rv = []; >+ attrs.forEach(function(attr) { >+ var str = ""; >+ var ns = attr[0]; >+ var name = attr[1]; >+ var value = attr[2]; >+ if (ns) >+ str += "{" + ns + "}"; >+ str += name + "=\"" + value + "\""; >+ rv.push(str); >+ }); >+ return rv.join(" "); >+} >+onload = function() { >+ var quirks = document.getElementById('quirks').contentWindow; >+ var xml = document.getElementById('xml').contentWindow; >+ [window, quirks, xml].forEach(function(global) { >+ var style = global.document.getElementsByTagName('style')[0]; >+ var elm; >+ function clean_slate() { >+ style.textContent = ''; >+ if (elm) >+ elm.parentNode.removeChild(elm); >+ elm = global.document.createElement('div'); >+ global.document.body.appendChild(elm); >+ } >+ function set_attrs(attrs) { >+ attrs.forEach(function(attr) { >+ elm.setAttributeNS(attr[0], attr[1], attr[2]); >+ }); >+ } >+ match.forEach(function(arr) { >+ var s = arr[0]; >+ var attrs = arr.slice(1); >+ var ns_decl = s.substr(0, "@namespace".length) == "@namespace"; >+ test(function() { >+ clean_slate(); >+ set_attrs(attrs); >+ style.textContent = s + ' { visibility:hidden }'; >+ assert_equals(style.sheet.cssRules.length, (ns_decl ? 2 : 1), 'rule didn\'t parse into CSSOM'); >+ assert_equals(global.getComputedStyle(elm).visibility, 'hidden', 'selector didn\'t match'); >+ }, s + ' <div ' + format_attrs(attrs) + '> in ' + global.mode); >+ if (!ns_decl) { >+ test(function() { >+ assert_equals(global.document.querySelector(s), elm, 'selector didn\'t match'); >+ }, s + ' <div ' + format_attrs(attrs) + '> with querySelector in ' + global.mode); >+ } >+ }); >+ nomatch.forEach(function(arr) { >+ var s = arr[0]; >+ var attrs = arr.slice(1); >+ var ns_decl = s.substr(0, "@namespace".length) == "@namespace"; >+ test(function() { >+ clean_slate(); >+ set_attrs(attrs); >+ style.textContent = s + ' { visibility:hidden }'; >+ assert_equals(style.sheet.cssRules.length, (ns_decl ? 2 : 1), 'rule didn\'t parse into CSSOM'); >+ assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'selector matched'); >+ }, s + ' <div ' + format_attrs(attrs) + '> in ' + global.mode); >+ if (!ns_decl) { >+ test(function() { >+ assert_equals(global.document.querySelector(s), null, 'selector matched'); >+ }, s + ' <div ' + format_attrs(attrs) + '> with querySelector in ' + global.mode); >+ } >+ }); >+ }); >+ done(); >+}; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html >new file mode 100644 >index 0000000000000000000000000000000000000000..be00f624e399dc5ce3cff144bfb1f251abe1023f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html >@@ -0,0 +1,118 @@ >+<!doctype html> >+<title>Selectors: syntax of case-sensitivity attribute selector</title> >+<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-case"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style></style> >+<div id=log></div> >+<div id=test foo="BAR"></div> >+<iframe id="quirks" src="resources/syntax-quirks.html"></iframe> >+<iframe id="xml" src="resources/syntax-xml.xhtml"></iframe> >+<script> >+setup({explicit_done:true}); >+var valid = [ >+ "[foo='BAR'] /* sanity check (valid) */", >+ "[foo='bar' i]", >+ "[foo='bar' I]", >+ "[foo=bar i]", >+ '[foo="bar" i]', >+ "[foo='bar'i]", >+ "[foo='bar'i ]", >+ "[foo='bar' i ]", >+ "[foo='bar' /**/ i]", >+ "[foo='bar' i /**/ ]", >+ "[foo='bar'/**/i/**/]", >+ "[foo=bar/**/i]", >+ "[foo='bar'\ti\t] /* \\t */", >+ "[foo='bar'\ni\n] /* \\n */", >+ "[foo='bar'\ri\r] /* \\r */", >+ "[foo='bar' \\i]", >+ "[foo='bar' \\69]", >+ "[foo~='bar' i]", >+ "[foo^='bar' i]", >+ "[foo$='bar' i]", >+ "[foo*='bar' i]", >+ "[foo|='bar' i]", >+ "[|foo='bar' i]", >+ "[*|foo='bar' i]", >+]; >+var invalid = [ >+ "[foo[ /* sanity check (invalid) */", >+ "[foo='bar' i i]", >+ "[foo i ='bar']", >+ "[foo= i 'bar']", >+ "[i foo='bar']", >+ "[foo='bar' i\u0000] /* \\0 */", >+ "[foo='bar' \u0130]", >+ "[foo='bar' \u0131]", >+ "[foo='bar' ii]", >+ "[foo='bar' ij]", >+ "[foo='bar' j]", >+ "[foo='bar' \\\\i]", >+ "[foo='bar' \\\\69]", >+ "[foo='bar' i()]", >+ "[foo='bar' i ()]", >+ "[foo='bar' () i]", >+ "[foo='bar' (i)]", >+ "[foo='bar' i []]", >+ "[foo='bar' [] i]", >+ "[foo='bar' [i]]", >+ "[foo='bar' i {}]", >+ "[foo='bar' {} i]", >+ "[foo='bar' {i}]", >+ "[foo='bar' 1i]", >+ "[foo='bar' 1]", >+ "[foo='bar' 'i']", >+ "[foo='bar' url(i)]", >+ "[foo='bar' ,i]", >+ "[foo='bar' i,]", >+ "[foo='bar']i", >+ "[foo='bar' |i]", >+ "[foo='bar' \\|i]", >+ "[foo='bar' *|i]", >+ "[foo='bar' \\*|i]", >+ "[foo='bar' *]", >+ "[foo='bar' \\*]", >+ "[foo i]", >+ "[foo/**/i]", >+]; >+var mode = "standards mode"; >+onload = function() { >+ var quirks = document.getElementById('quirks').contentWindow; >+ var xml = document.getElementById('xml').contentWindow; >+ [window, quirks, xml].forEach(function(global) { >+ var style = global.document.getElementsByTagName('style')[0]; >+ var elm = global.document.getElementById('test'); >+ function clean_slate() { >+ style.textContent = ''; >+ assert_equals(style.sheet.cssRules.length, 0, 'CSSOM was not empty for empty stylesheet'); >+ assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'computed style for empty stylesheet'); >+ } >+ valid.forEach(function(s) { >+ test(function() { >+ clean_slate(); >+ style.textContent = s + ' { visibility:hidden }'; >+ assert_equals(style.sheet.cssRules.length, 1, 'valid rule didn\'t parse into CSSOM'); >+ assert_equals(global.getComputedStyle(elm).visibility, 'hidden', 'valid selector didn\'t match'); >+ }, s + ' in ' + global.mode); >+ test(function() { >+ assert_equals(global.document.querySelector(s), elm, 'valid selector'); >+ }, s + ' with querySelector in ' + global.mode); >+ }); >+ invalid.forEach(function(s) { >+ test(function() { >+ clean_slate(); >+ style.textContent = s + ' { visibility:hidden }'; >+ assert_equals(style.sheet.cssRules.length, 0, 'invalid rule parsed into CSSOM'); >+ assert_equals(global.getComputedStyle(elm).visibility, 'visible', 'invalid selector matched'); >+ }, s + ' in ' + global.mode); >+ test(function() { >+ assert_throws("SyntaxError", function() { >+ global.document.querySelector(s); >+ }, 'invalid selector'); >+ }, s + ' with querySelector in ' + global.mode); >+ }); >+ }); >+ done(); >+}; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..96df740854d8e5575355334cd583f63c8f232d01 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/semantics.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/attribute-selectors/attribute-case/syntax.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/child-indexed-pseudo-class.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/child-indexed-pseudo-class.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2e496d854184796be55d66566af8739fd4a7f776 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/child-indexed-pseudo-class.html >@@ -0,0 +1,55 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Matching of child-indexed pseudo-classes</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:ecoal95@gmail.com"> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/#child-index"> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script> >+var check = function(element, selectors, qsRoot) { >+ for (var i = 0; i < selectors.length; ++i) { >+ var selector = selectors[i][0]; >+ var expected = selectors[i][1]; >+ test(function() { >+ assert_equals(expected, element.matches(selector)); >+ >+ if (qsRoot) { >+ assert_equals(expected, element === qsRoot.querySelector(selector)); >+ var qsa = qsRoot.querySelectorAll(selector); >+ assert_equals(expected, !!qsa.length && element === qsa[0]); >+ } >+ }, "Expected " + element.tagName + " element to " + >+ (expected ? "match " : "not match ") + selector + " with matches" + >+ (qsRoot ? ", querySelector(), and querySelectorAll()" : "")); >+ } >+} >+ >+var rootOfSubtreeSelectors = [ >+ [ ":first-child", true ], >+ [ ":last-child", true ], >+ [ ":only-child", true ], >+ [ ":first-of-type", true ], >+ [ ":last-of-type", true ], >+ [ ":only-of-type", true ], >+ [ ":nth-child(1)", true ], >+ [ ":nth-child(n)", true ], >+ [ ":nth-last-child(1)", true ], >+ [ ":nth-last-child(n)", true ], >+ [ ":nth-of-type(1)", true ], >+ [ ":nth-of-type(n)", true ], >+ [ ":nth-last-of-type(1)", true ], >+ [ ":nth-last-of-type(n)", true ], >+ [ ":nth-child(2)", false ], >+ [ ":nth-last-child(2)", false], >+ [ ":nth-of-type(2)", false ], >+ [ ":nth-last-of-type(2)", false], >+]; >+ >+check(document.documentElement, rootOfSubtreeSelectors, document); >+check(document.createElement('div'), rootOfSubtreeSelectors); >+ >+var fragment = document.createDocumentFragment(); >+var div = document.createElement('div'); >+fragment.appendChild(div); >+check(div, rootOfSubtreeSelectors, fragment); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-1.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-1.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..54b2ad93f71cbe73e0478888e650406ffd6676d0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-1.xml >@@ -0,0 +1,14 @@ >+<csstest def="Groups of selectors" module="W3C Selectors" modulename="css3-modsel" number="1" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>li,p { background-color : lime }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li>The background of this list item should be green</li> >+ <li>The background of this second list item should be also green</li> >+</ul> >+<p xmlns="http://www.w3.org/1999/xhtml">The background of this paragraph should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-10.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-10.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e6a028b472cef064489e9c7758b6b0353c057874 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-10.xml >@@ -0,0 +1,14 @@ >+<csstest def="Substring matching attribute selector (end)" module="W3C Selectors" modulename="css3-modsel" number="10" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { background-color : red } >+p[title$="bar"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="foobar" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background because >+its title attribute ends with "bar"</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..44910f25d1a885066ac91074e5d94dd2e38c1d93 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute dash-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="100" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[a|foo|="bar"], *|*[html|lang|="en"] { background-color : lime } >+</cssrules> >+ >+<code> >+<p html:lang="en-us" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:foo="bargain-trash" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="bar-drink-glass" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+<s b:foo="bar-drink-glass" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7e58b62fc1c2b5643a72ff1457d42ae359353535 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute dash-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="100b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[a|foo|="bar"], *|*[html|lang|="en"] { background-color : red } >+</cssrules> >+ >+<code> >+<p html:lang="en-us" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:foo="bargain-trash" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="bar-drink-glass" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+<s b:foo="bar-drink-glass" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bb8e1639aa0127bd152a96737ae7c33d4eec5893 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute value selector on beginning with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="101" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[a|title^="si on"], *|*[title^="si on"] { background-color : lime } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="et si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e71226d5d124f68e16d13e3abb6f7cb3fe6b1a6e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute value selector on beginning with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="101b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[a|title^="si on"], *|*[title^="si on"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="et si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c331c591a47f8069dc6ecbbb432f218890fea32b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102.xml >@@ -0,0 +1,23 @@ >+<csstest def="Substring matching attribute value selector on end with declared namespace" >+module="W3C Selectors" modulename="css3-modsel" number="102" rev="1.1" date="13-november-2001" >+xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[a|title$="tait"], p[|title$="tait"] { background-color : lime } >+*|*[|title$="tait"], *|*[html|title$="tait"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q xmlns:a="http://www.example.org/a" a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a" xmlns:a="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b" xmlns:b="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ed37bf7a6496abf663fd860d8245e19645712e09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102b.xml >@@ -0,0 +1,22 @@ >+<csstest def="Substring matching attribute value selector on end with declared namespace" >+module="W3C Selectors" modulename="css3-modsel" number="102b" rev="1.1" date="13-november-2001" >+xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[a|title$="tait"], *|*[html|title$="tait"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q xmlns:a="http://www.example.org/a" a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a" xmlns:a="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b" xmlns:b="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d0581121a11c84c2964a567b1bd67c5e7d27305b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103.xml >@@ -0,0 +1,21 @@ >+<csstest def="Substring matching attribute value selector on middle with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="103" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[a|title*="hanta"], p[|title*="hanta"] { background-color : lime } >+*|*[|title*="hanta"], *|*[html|title*="hanta"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ef1e8557bccbc86855b44b583b4506046013c5f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute value selector on middle with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="103b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[a|title*="hanta"], *|*[html|title*="hanta"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..a7919bbb27ce359989e4570e07cbea49a2be8262 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute existence selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="104" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|title] { background-color : lime } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2147452f3f82fbaede1c1db5e242c5e61f4f5211 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute existence selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="104b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|title] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..12946be512a4ccfc9b5f7210fe3dedc8de6b53ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="105" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|title="si on chantait"] { background-color : lime } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..47c4d987c08419809b2df76b87e1ff7eec939370 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105b.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="105b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|title="si on chantait"] { background-color : red } >+</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..13e1f5d3fd621e0212f2ab2593e5ff425ef21ea0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute space-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="106" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|class~="deux"], *|*[*|foo~="deux"] { background-color : lime } >+</cssrules> >+ >+<code> >+<p class="un deux trois" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:bar="un deux trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:foo="un second deuxieme trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="un deux trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:foo="un deux trois" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e990b19905262376a65a4a44170a4b4a5476c9da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106b.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute space-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="106b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|class~="deux"], *|*[*|foo~="deux"] { background-color : red } >+</cssrules> >+ >+<code> >+<p class="un deux trois" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:bar="un deux trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:foo="un second deuxieme trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="un deux trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:foo="un deux trois" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3782017361d0449de9936dcc27801e63271b533d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute dash-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="107" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[*|lang|="en"], *|*[a|foo|="un-d"] { background-color : lime } >+</cssrules> >+ >+<code> >+<p lang="en-us" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:foo="un-deux-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:foo="un-second-deuxieme-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="un-d-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:foo="un-d-trois" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fb8d7c82e91569add8bc9d862238bcd5751f85df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107b.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute dash-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="107b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[*|lang|="en"], *|*[a|foo|="un-d"] { background-color : red } >+</cssrules> >+ >+<code> >+<p lang="en-us" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:foo="un-deux-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<q a:foo="un-second-deuxieme-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:foo="un-d-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:foo="un-d-trois" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..790435a2d5d75a6d448e99459963089fd7b37127 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on beginning with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="108" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|title^="si on"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cea8ca41d22b52cf5ad18834b02e49b28cd58467 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on beginning with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="108b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|title^="si on"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..da0cdb5c06bca3cb5a443b60224441787a423dce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on end with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="109" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|title$="tait"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..41914e08b8e90ec6ff0d14bad7f7cc5b370c0108 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on end with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="109b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|title$="tait"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-11.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-11.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6a8ef38babf7ce61cbc185f77b25cc1e58626b56 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-11.xml >@@ -0,0 +1,14 @@ >+<csstest def="Substring matching attribute selector (contains)" module="W3C Selectors" modulename="css3-modsel" number="11" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { background-color : red } >+p[title*="bar"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="foobarufoo" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background because >+its title attribute contains "bar"</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..a6c13036a2ff4647a5980ac36064f6fe89e4c059 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on middle with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="110" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+*|*[*|title*="on ch"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..07b5bd816de7a872cd486e57ba57aba2f73aa820 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on middle with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="110b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+*|*[*|title*="on ch"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4d22762c22c56a1ad45058122d3dd528cf9abc03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute existence selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="111" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[|title] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..530c32ae77271894c47b3bf9fb48ebb11e14bcc7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111b.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute existence selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="111b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[|title] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d8976209589a8732acf392d1523a0ae5f29f001e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="112" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[|title="si on chantait"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e4ad26641ef880417320164563d8de3c591d7425 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="112b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[|title="si on chantait"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cc6d62375b258589f04e1fd83094e1dd628b069e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113.xml >@@ -0,0 +1,19 @@ >+<csstest def="Attribute space-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="113" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|q { background-color : red } >+*|*[|class~="foo"] { background-color : lime }</cssrules> >+ >+<code> >+<p class="bar foo toto" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<address class="bar foofoo toto" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<q class="bar foo toto" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r b:class="bar foo toto" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5c345804b2a4a783d4426ac67d1503225b83f9a6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Attribute space-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="113b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|q { background-color : lime ! important } >+*|*[|class~="foo"] { background-color : red }</cssrules> >+ >+<code> >+<p class="bar foo toto" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<address class="bar foofoo toto" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<q class="bar foo toto" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r b:class="bar foo toto" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0524450449c23d0df7ea749de79047d4d01eeb3b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute dash-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="114" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|q { background-color : red } >+*|*[|lang|="foo-bar"], *|*[|myattr|="tat-tut"] { background-color : lime }</cssrules> >+ >+<code> >+<p lang="foo-bar" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<address lang="foo-b" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<address lang="foo-barbar-toto" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<q myattr="tat-tut-tot" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r b:myattr="tat-tut-tot" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..15eb9a5670241029ffca6f22a4bfcaf7c1ba2cae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute dash-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="114b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|q { background-color : lime ! important } >+*|*[|lang|="foo-bar"], *|*[|myattr|="tat-tut"] { background-color : red }</cssrules> >+ >+<code> >+<p lang="foo-bar" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<address lang="foo-b" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<address lang="foo-barbar-toto" xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<q myattr="tat-tut-tot" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r b:myattr="tat-tut-tot" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fc7c1ddcbce883f2e13321ad75a448216d2dce78 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on beginning without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="115" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[|title^="si on"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9d35f3a9123d182b18b64ecf55593052943e7b12 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on beginning without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="115b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[|title^="si on"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6cb57a475b03b06a6449be0d75cc5178f63722b1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on end without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="116" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[|title$="tait"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c6ee055bd3fa944e35e508e2946e5c593b378cfa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on end without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="116b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[|title$="tait"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..162692dbd8a318e6eb7647944d47a0f233e07f24 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on middle without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="117" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[|title*="on ch"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..18b49772a59dc11dda0a2b6458bc01dee3adea2b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Substring matching attribute selector on middle without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="117b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[|title*="on ch"] { background-color : red }</cssrules> >+ >+<code> >+<p title="si on chantait" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should be unstyled.</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-118.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-118.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9179fc63b7e5ea2dc63ccc1a33e88e16ba4d02b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-118.xml >@@ -0,0 +1,24 @@ >+<csstest def="NEGATED type element selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="118" rev="1.2" date="30-july-2002" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|l { display : block ; margin-bottom : 1em } >+div.test * { background-color : red } >+div.test *:not(a|p) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="test" xmlns="http://www.w3.org/1999/xhtml"> >+ <p xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+ <p xmlns="http://www.example.org/b">This paragraph should have a green background.</p> >+ <p xmlns="">This paragraph should have a green background.</p> >+ <p xmlns="http://www.example.org/a"> >+ <l>This paragraph should have a green background.</l> >+ </p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-119.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-119.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..17ca9382442e7ea13d206a3a6ca5ea4a602959df >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-119.xml >@@ -0,0 +1,29 @@ >+<csstest def="NEGATED type element selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="119" rev="1.2" date="30-july-2002" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.test *:not(*|div) { display : block ; margin-bottom : 1em ; >+ background-color : red } >+div.test > *:not(*|p):not(*|div) { background-color : lime } >+div.stub > *:not(*|div) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="test" xmlns="http://www.w3.org/1999/xhtml"> >+<div class="stub"> >+<p>This paragraph should have a green background.</p> >+<p xmlns="http://www.example.org/b">This paragraph should have a green background.</p> >+<p xmlns="">This paragraph should have a green background.</p> >+<p xmlns="http://www.example.org/a">This paragraph should have a green background.</p> >+</div> >+<address>This address should have a green background.</address> >+<s xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t xmlns="">This paragraph should have a green background.</t> >+<u xmlns="http://www.example.org/a">This paragraph should have a green background.</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-12.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-12.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..7e5efa12b08afbb1d99d4e1faa575681c4dbbcbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-12.xml-removed >@@ -0,0 +1,14 @@ >+<csstest def="Default attribute value" module="W3C Selectors" modulename="css3-modsel" number="12" rev="1.1" date="21-june-2003" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>form { background-color : lime } >+form[method] { background-color : red } >+form[method="get"] { background-color : red }</cssrules> >+<code> >+<form action="http://www.example.org/foo.cgi" xmlns="http://www.w3.org/1999/xhtml"> >+<p>The line should have a green background.</p> >+</form> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-120.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-120.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..536153b5624ea2495e1139101bde4979980d6bdd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-120.xml >@@ -0,0 +1,24 @@ >+<csstest def="NEGATED type element selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="120" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > * { display : block ; margin-bottom : 1em ; >+ background-color : red } >+div.stub > *:not(|p) { background-color : lime } >+div.stub > *|l > *:not(|p) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should have a green background</p> >+<p xmlns="http://www.example.org/b">This paragraph should have a green background</p> >+<l xmlns="http://www.example.org/b"> >+<p xmlns="">This paragraph should have a >+ green background</p> >+</l> >+<p xmlns="http://www.example.org/a">This paragraph should have a green background</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-121.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-121.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..28705a986a4946f75df10e1f0914ae8d6f23837d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-121.xml >@@ -0,0 +1,26 @@ >+<csstest def="NEGATED universal selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="121" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { color : red ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not(a|*) { color : green } >+div.stub v { color : green } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<address>This address should be in green characters.</address> >+<s xmlns="http://www.example.org/b">This paragraph should be in green characters.</s> >+<t xmlns="">This paragraph should be in green characters.</t> >+<u xmlns="http://www.example.org/a"> >+<v>This paragraph should be in green characters.</v> >+</u> >+</div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-122.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-122.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..648983399be313b5ced0ef674adac08ba811c5d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-122.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED universal selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="122" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { background-color : lime ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not(*|*) { background-color : red } >+/* yes, the rule just above selects nothing... That's the point */ >+</cssrules> >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<address>This address should have a green background</address> >+<s xmlns="http://www.example.org/b">This paragraph should have a green background</s> >+<t xmlns="">This paragraph should have a green background</t> >+<u xmlns="http://www.example.org/a">This paragraph should have a green background</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e9f541cf368f2092221f15641d6083aa2d40ca9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED universal selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="123" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { color : red ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not(|*) { color : green } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<address>This address should be in green characters.</address> >+<s xmlns="http://www.example.org/b">This paragraph should be in green characters.</s> >+<u xmlns="http://www.example.org/a">This paragraph should be in green characters.</u> >+</div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1cd2ae359aee66802cc26d91b625facc947aa700 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123b.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED universal selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="123b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { color : green ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not(|*) { color : red ! important } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<t xmlns="">This paragraph should be in green characters.</t> >+</div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6d7fc65024ba152de0ea88cb77ff7d397536176d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="124" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : red } >+div.stub *:not([a|title="foo"]) {background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="foo">This paragraph should have a green background.</p> >+<q a:title="foo" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<s a:title="foobar" xmlns="http://www.example.org/a">This paragraph should have a green background.</s> >+<r b:title="foo" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1a4f8633896cd3fffe29187545fe1e145d50e5ee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="124b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r, *|s { background-color : lime ! important } >+div.stub *:not([a|title="foo"]) {background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="foo">This paragraph should have a green background.</p> >+<q a:title="foo" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<s a:title="foobar" xmlns="http://www.example.org/a">This paragraph should have a green background.</s> >+<r b:title="foo" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0365c2a4421cc625c6e71b5bec53ed7cef81b71c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute space-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="125" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : red } >+div.stub *|*:not([a|foo~="bar"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="hgt bardot f" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="hgt bar f" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="hgt bar f" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..25cf9336304377c21470604cc1cc097ff35612ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute space-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="125b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : lime ! important } >+div.stub *|*:not([a|foo~="bar"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="hgt bardot f" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="hgt bar f" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="hgt bar f" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..57bfd40d6cbbefae7136c069bf16ad1f8037b354 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute dash-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="126" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : red } >+div.stub *|*:not([a|foo|="bar"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="bargain-trash" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="bar-drink-glass" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="bar-drink-glass" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3d200684d4ed3cdbbc2674725eb7a7e4a427ed23 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute dash-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="126b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : lime ! important } >+div.stub *|*:not([a|foo|="bar"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="bargain-trash" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="bar-drink-glass" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="bar-drink-glass" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b9d4d717c472511aedd6bae6f23ceee40881449f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on beginning with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="127" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : red } >+div.stub *|*:not([a|title^="si on"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="et si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..aeed223c2b305697e94de8fb9201b0af0facdd1a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on beginning with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="127b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : lime ! important } >+div.stub *|*:not([a|title^="si on"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="et si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b7095d1ff83d7b648541c062b9344379b777924e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on end with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="128" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : red } >+div.stub *|*:not([a|title$="tait"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ec336c02bda17c68e5d813087d4b073d7e9f4984 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on end with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="128b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : lime ! important } >+div.stub *|*:not([a|title$="tait"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7b035992d3f7a8a38a0d851ef3a28d9a2cba1fec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on middle with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="129" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : red } >+div.stub *|*:not([a|title*="hanta"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..80ea9377d0c88df80733b7ccdc4bc9e1d41376f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Substring matching attribute value selector on middle with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="129b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|s { background-color : lime ! important } >+div.stub *|*:not([a|title*="hanta"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-13.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-13.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9fbd1d596ad150d18f5e3b65a8525e50da1130da >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-13.xml >@@ -0,0 +1,19 @@ >+<csstest def="Class selectors" module="W3C Selectors" modulename="css3-modsel" number="13" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>li { background-color : red } >+.t1 { background-color : lime } >+li.t2 { background-color : lime } >+.t3 { background-color : red }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="t1">This list item should have green background because its class is "t1"</li> >+ <li class="t2">This list item should have green background because its class is "t2"</li> >+ <li class="t2"> >+<span class="t33">This list item should have green background because >+ the inner SPAN does not match SPAN.t3</span> >+</li> >+</ul> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..89758646f3fea2d98e58871a121870d19a5ea4ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute existence selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="130" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q { background-color : red } >+div.stub *|*:not([*|title]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cbbc27506ef1944613a929520713315855b45d85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute existence selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="130b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q { background-color : lime ! important } >+div.stub *|*:not([*|title]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7796e77ab18e33cf80776b92a168ceac095a86ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Attribute value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="131" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q { background-color : red } >+div.stub *|*:not([*|title="si on chantait"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..20bebae23f7b49873fd4b5f13123552296647b69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131b.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Attribute value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="131b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q { background-color : lime ! important } >+div.stub *|*:not([*|title="si on chantait"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:foo="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..93b657592a9c5e601e3528afdb8b288e50e02ece >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132.xml >@@ -0,0 +1,25 @@ >+<csstest def="NEGATED Attribute space-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="132" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p.deu, *|q { background-color : red } >+div.stub html|*:not([*|class~="deux"]), >+ div.stub *|*:not(html|*):not([*|foo~="deux"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="un deux trois">This paragraph should be unstyled</p> >+<p class="un deu trois">This paragraph should have a green background.</p> >+<q a:bar="un deux trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:foo="un second deuxieme trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="un deux trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="un deux trois" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bdfc4b01162daeb51ede62b815d0ef4103810669 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132b.xml >@@ -0,0 +1,25 @@ >+<csstest def="NEGATED Attribute space-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="132b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p.deu, *|q { background-color : lime ! important } >+div.stub html|*:not([*|class~="deux"]), >+ div.stub *|*:not(html|*):not([*|foo~="deux"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="un deux trois">This paragraph should be unstyled</p> >+<p class="un deu trois">This paragraph should have a green background.</p> >+<q a:bar="un deux trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:foo="un second deuxieme trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="un deux trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="un deux trois" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..aac7b33aababc354bb0ad93efb928f18b9ba7b68 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133.xml >@@ -0,0 +1,25 @@ >+<csstest def="NEGATED Attribute dash-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="133" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p.foo, *|q, *|s { background-color : red } >+div.stub html|*:not([*|lang|="en"]), >+ div.stub *|*:not(html|*):not([a|foo|="un-d"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p lang="en-us">This paragraph should be unstyled.</p> >+<p lang="fr" class="foo">This paragraph should have a green background.</p> >+<q a:foo="un-deux-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:foo="un-second-deuxieme-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="un-d-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="un-d-trois" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bbee1b9fdd4e4ea42c1b19aef40c9bcd49d1a5a9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133b.xml >@@ -0,0 +1,25 @@ >+<csstest def="NEGATED Attribute dash-separated value selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="133b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p.foo, *|q, *|s { background-color : lime ! important } >+div.stub html|*:not([*|lang|="en"]), >+ div.stub *|*:not(html|*):not([a|foo|="un-d"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p lang="en-us">This paragraph should be unstyled.</p> >+<p lang="fr" class="foo">This paragraph should have a green background.</p> >+<q a:foo="un-deux-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<q a:foo="un-second-deuxieme-trois" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:foo="un-d-trois" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:foo="un-d-trois" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0786e24af6601e9be0ecb71a58d58c5f6e157c9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134.xml >@@ -0,0 +1,23 @@ >+<csstest def="NEGATED Substring matching attribute selector on beginning with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="134" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : red } >+div.stub *|*:not([*|title^="si on"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si il chantait" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e526178e31225a4ee49cbe777180023a40575e65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134b.xml >@@ -0,0 +1,23 @@ >+<csstest def="NEGATED Substring matching attribute selector on beginning with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="134b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : lime ! important } >+div.stub *|*:not([*|title^="si on"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si il chantait" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6f07a3f05727a1e43772f590777dbfb260abf392 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135.xml >@@ -0,0 +1,23 @@ >+<csstest def="NEGATED Substring matching attribute selector on end with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="135" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : red } >+div.stub *|*:not([*|title$="tait"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si tu chantais" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..be2ffab1605a5590bbe25e829c04e844496384d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135b.xml >@@ -0,0 +1,23 @@ >+<csstest def="NEGATED Substring matching attribute selector on end with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="135b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : lime ! important } >+div.stub *|*:not([*|title$="tait"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si tu chantais" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e5b9be82129590a8c444503cd2c600ac70c1f7c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136.xml >@@ -0,0 +1,24 @@ >+<csstest def="NEGATED Substring matching attribute selector on middle with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="136" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : red } >+div.stub *|*:not([*|title*="on ch"]) { background-color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si il chantait" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..df0a18c7c2280de9efab9620d05294be4c37f105 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136b.xml >@@ -0,0 +1,24 @@ >+<csstest def="NEGATED Substring matching attribute selector on middle with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="136b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|p.red, *|q, *|t { background-color : lime ! important } >+div.stub *|*:not([*|title*="on ch"]) { background-color : red } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<p title="si il chantait" class="red">This paragraph should have a green background.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..449365b2f0291e9913e792c6a9e3223e1074ed76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137.xml >@@ -0,0 +1,19 @@ >+<csstest def="NEGATED Attribute existence selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="137" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|q, *|r { display : block ; margin-bottom : 1em } >+*|q { background-color : red } >+div.stub *|*:not([|title]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..01570504e4ee0e1940aee34ab1170761ecf2b887 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137b.xml >@@ -0,0 +1,19 @@ >+<csstest def="NEGATED Attribute existence selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="137b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|q, *|r { display : block ; margin-bottom : 1em } >+*|q { background-color : lime ! important } >+div.stub *|*:not([|title]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ef64af1ce58ed747b0e381d1c70df4a01acbfd95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="138" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : red } >+div.stub *|*:not([|title="si on chantait"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1723302997b5394fa5ff694a50419740a151f49f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="138b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : lime ! important } >+div.stub *|*:not([|title="si on chantait"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q a:title="si on chantait" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e06aa60f5573b9f6839256a2cdafd6c38d6a40f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute space-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="139" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|address, *|r { background-color : red } >+div.stub *|*:not([|class~="foo"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="bar foo toto">This paragraph should be unstyled.</p> >+<address class="bar foofoo toto">This address should have a green background.</address> >+<q class="bar foo toto" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r b:class="bar foo toto" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d60f718048986c8766b8e4f0de16bcf455b4cd22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139b.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED Attribute space-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="139b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|address, *|r { background-color : lime ! important } >+div.stub *|*:not([|class~="foo"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="bar foo toto">This paragraph should be unstyled.</p> >+<address class="bar foofoo toto">This address should have a green background.</address> >+<q class="bar foo toto" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r b:class="bar foo toto" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d570a2e50e253219fc6f4783c2688f7f2199d355 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14.xml >@@ -0,0 +1,27 @@ >+<csstest def="More than one class selector" module="W3C Selectors" modulename="css3-modsel" number="14" rev="1.2" date="22-june-2003" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { background-color : red ; border : thick solid red ; padding : 1em } >+p.t1 { background-color : lime } >+p.t2 { border : thick solid green } >+ >+div { background: green; color: white; } >+div.teST { background: red; color: yellow; } >+div.te { background: red; color: yellow; } >+div.st { background: red; color: yellow; } >+div.te.st { background: red; color: yellow; }</cssrules> >+ >+<code> >+ >+<p class="t1 t2" xmlns="http://www.w3.org/1999/xhtml">This paragraph >+should have a green background and a green thick solid border because >+it carries both classes t1 and t2.</p> >+ >+<div class="test" xmlns="http://www.w3.org/1999/xhtml">This line >+should be green.</div> >+ >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5dc99e07ce189d0f06b8e8f254dec2c867c7904d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Attribute dash-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="140" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|address, *|r { background-color : red } >+div.stub *|*:not([|lang|="foo-bar"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p lang="foo-bar">This paragraph should be unstyled.</p> >+<address lang="foo-b">This address should have a green background.</address> >+<address lang="foo-barbar-toto">This address should have a green background.</address> >+<q lang="foo-bar" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r b:lang="foo-bar" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..93b811a004d3cd0285aee609fe85bb5ba06a92a6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140b.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Attribute dash-separated value selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="140b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|address, *|q, *|r { display : block ; margin-bottom : 1em } >+*|address, *|r { background-color : lime ! important } >+div.stub *|*:not([|lang|="foo-bar"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p lang="foo-bar">This paragraph should be unstyled.</p> >+<address lang="foo-b">This address should have a green background.</address> >+<address lang="foo-barbar-toto">This address should have a green background.</address> >+<q lang="foo-bar" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+<r b:lang="foo-bar" xmlns="http://www.example.org/b">This paragraph should have a green background.</r> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..def596ab199e4bde245217f305a7b83c2da6b081 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on beginning without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="141" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : red } >+div.stub *|*:not([|title^="si on"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cc310d5135ae58d0862b480cef1bc47bdc0342c8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141b.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on beginning without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="141b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : lime ! important } >+div.stub *|*:not([|title^="si on"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t b:ti="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..49bf0b7c588713b95038123d55ca3799192476d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on end without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="142" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : red } >+div.stub *|*:not([|title$="tait"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..861e3f58a681ec2a73df99d180970ce3644586bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142b.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on end without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="142b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : lime ! important } >+div.stub *|*:not([|title$="tait"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b9bddae77d6609c2f242aac16b5cf1109c49b3f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on middle without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="143" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : red } >+div.stub *|*:not([|title*="on ch"]) { background-color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b81f992559c67b877f9785106eea14517f3a7158 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143b.xml >@@ -0,0 +1,22 @@ >+<csstest def="NEGATED Substring matching attribute selector on middle without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="143b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em } >+*|q, *|s, *|t { background-color : lime ! important } >+div.stub *|*:not([|title*="on ch"]) { background-color : red }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p title="si on chantait">This paragraph should be unstyled.</p> >+<q a:title="si nous chantions" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+<r title="si on chantait" xmlns="http://www.example.org/a">This paragraph should be unstyled.</r> >+<s b:title="si on chantait" xmlns="http://www.example.org/b">This paragraph should have a green background.</s> >+<t title="si nous chantions" xmlns="http://www.example.org/b">This paragraph should have a green background.</t> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-144.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-144.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..790d05f61ae31cac24e268fc7814eed5f4d598e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-144.xml >@@ -0,0 +1,14 @@ >+<csstest def="NEGATED :enabled:disabled pseudo-classes" module="W3C Selectors" modulename="css3-modsel" number="144" rev="1.0" date="12-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules>div :not(:enabled):not(:disabled) { background: lime; } >+p { background : red;}</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should have a green background.</p> >+ </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7ad7011c1d3e745830becf997899d679a90470e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145a.xml >@@ -0,0 +1,31 @@ >+<csstest def=":nth-of-type() pseudo-class with hidden elements" module="W3C Selectors" modulename="css3-modsel" number="145a" rev="1.1" date="9-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=odd] { background: red; } >+ line:nth-of-type(odd) { background: lime; } >+ [hidden] { display: none; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd" hidden="hidden">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even" hidden="hidden">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even" hidden="hidden">This line should be unstyled.</line> >+ <line type="odd" hidden="hidden">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d55730b065283b08d0a264c2b3f66c4e611eaeca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145b.xml >@@ -0,0 +1,31 @@ >+<csstest def=":nth-of-type() pseudo-class with hidden elements" module="W3C Selectors" modulename="css3-modsel" number="145b" rev="1.1" date="9-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=odd] { background: lime ! important; } >+ line:nth-of-type(odd) { background: red; } >+ [hidden] { display: none; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd" hidden="hidden">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even" hidden="hidden">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ <line type="even" hidden="hidden">This line should be unstyled.</line> >+ <line type="odd" hidden="hidden">This line should be green.</line> >+ <line type="even">This line should be unstyled.</line> >+ <line type="odd">This line should be green.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2e2f822568c921716503394ccddd422df87daf50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146a.xml >@@ -0,0 +1,37 @@ >+<csstest def=":nth-child() pseudo-class with hidden elements" module="W3C Selectors" modulename="css3-modsel" number="146a" rev="1.1" date="9-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=match] { background: red; } >+ line:nth-child(3n-1) { background: lime; } >+ [hidden] { display: none; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="match" hidden="hidden">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b8ac824396903475d2a6ac4b0903b62b15c2c2e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146b.xml >@@ -0,0 +1,37 @@ >+<csstest def=":nth-child() pseudo-class with hidden elements" module="W3C Selectors" modulename="css3-modsel" number="146b" rev="1.1" date="9-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=match] { background: lime ! important; } >+ line:nth-child(3n-1) { background: red; } >+ [hidden] { display: none; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="match" hidden="hidden">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..70bab9788b93df417c8c5f03b6d39305cf0049ab >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147a.xml >@@ -0,0 +1,37 @@ >+<csstest def=":nth-last-of-type() pseudo-class with collapsed elements" module="W3C Selectors" modulename="css3-modsel" number="147a" rev="1.2" date="10-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=match] { background: red; } >+ line:nth-last-of-type(3n-1) { background: lime; } >+ [hidden] { visibility: collapse; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match" hidden="hidden">This line should be green.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3791bdd4a7e6f6e9eb232a05eb6fb1863aa1a257 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147b.xml >@@ -0,0 +1,37 @@ >+<csstest def=":nth-last-of-type() pseudo-class with collapsed elements" module="W3C Selectors" modulename="css3-modsel" number="147b" rev="1.2" date="10-october-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ line { display: block; } >+ [type~=match] { background: lime ! important; } >+ line:nth-last-of-type(3n-1) { background: red; } >+ [hidden] { visibility: collapse; } >+</cssrules> >+ >+<code> >+ <test xmlns="http://www.example.org/"> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match" hidden="hidden">This line should be green.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="" hidden="hidden">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="">This line should be unstyled.</line> >+ <line type="match">This line should be green.</line> >+ <line type="">This line should be unstyled.</line> >+ </test> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-148.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-148.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..da1756f509c12bd1198ab385090ef7c7dece721f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-148.xml >@@ -0,0 +1,14 @@ >+<csstest def=":empty pseudo-class and text" module="W3C Selectors" modulename="css3-modsel" number="148" rev="1.0" date="15-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ p:empty { background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1c20641cd2deced3c4224fcf585a2a7285710217 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149.xml >@@ -0,0 +1,16 @@ >+<csstest def=":empty pseudo-class and empty elements" module="W3C Selectors" modulename="css3-modsel" number="149" rev="1.0" date="15-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address:empty { background: lime; } >+ address { background: red; margin: 0; height: 1em; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://www.w3.org/1999/xhtml"/> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c883ff0d5460f3e7f190afd3f3516322c0981a8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149b.xml >@@ -0,0 +1,16 @@ >+<csstest def=":empty pseudo-class and empty elements" module="W3C Selectors" modulename="css3-modsel" number="149b" rev="1.0" date="15-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address:empty { background: lime; } >+ address { background: red; margin: 0; height: 1em; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://www.w3.org/1999/xhtml"></address> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fd9801f55c735cdbfd0b2d7177fa608f58aa1dd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14b.xml >@@ -0,0 +1,20 @@ >+<csstest def="More than one class selector" module="W3C Selectors" modulename="css3-modsel" number="14b" rev="1.1" date="27-april-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: green; color: white; } >+.t1.fail { background: red; color: yellow; } >+.fail.t1 { background: red; color: yellow; } >+.t2.fail { background: red; color: yellow; } >+.fail.t2 { background: red; color: yellow; } >+/* Note: This is a valid test even per CSS1, since in CSS1 those rules >+ are invalid and should be dropped. */ >+</cssrules> >+ >+<code> >+ <p class="t1" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+ <p class="t1 t2" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7e0946dcb8f74eb1cd424c3aebfd900962f389fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14c.xml >@@ -0,0 +1,20 @@ >+<csstest def="More than one class selector" module="W3C Selectors" modulename="css3-modsel" number="14c" rev="1.0" date="6-december-2002" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: red; color: yellow; } >+p.t1.t2 { background: green; color: white; } >+div { background: green; color: white; } >+div.t1 { background: red; color: yellow; } >+address { background: red; color: yellow; } >+address.t5.t5 { background: green; color: white; } >+</cssrules> >+ >+<code> >+ <p class="t1 t2" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+ <div class="t3" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</div> >+ <address class="t4 t5 t6" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14d.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14d.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2623cc919ae17cc3f84839a2f088b5acd72e6c21 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14d.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED More than one class selector" module="W3C Selectors" modulename="css3-modsel" number="14d" rev="1.0" date="6-december-2002" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: green; color: white; } >+.t1:not(.t2) { background: red; color: yellow; } >+:not(.t2).t1 { background: red; color: yellow; } >+.t2:not(.t1) { background: red; color: yellow; } >+:not(.t1).t2 { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+ <p class="t1 t2" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14e.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14e.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3cd4f29bc8954815c9951e6c1d7a2b110a9f3a29 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14e.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED More than one class selector" module="W3C Selectors" modulename="css3-modsel" number="14e" rev="1.0" date="6-december-2002" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: green; color: white; } >+p:not(.t1):not(.t2) { background: red; color: yellow; } >+div { background: red; color: yellow; } >+div:not(.t1) { background: green; color: white; } >+address { background: green; color: white; } >+address:not(.t5):not(.t5) { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+ <p class="t1 t2" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+ <div class="t3" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</div> >+ <address class="t4 t5 t6" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2821ea2ccdbafa9db7b8ea88d8d9c3e5a508c7d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15.xml >@@ -0,0 +1,18 @@ >+<csstest def="ID selectors" module="W3C Selectors" modulename="css3-modsel" number="15" rev="1.1" date="19-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>li { background-color : red } >+#t1 { background-color : lime } >+li#t2 { background-color : lime } >+li#t3 { background-color : lime } >+#t4 { background-color : red }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li id="t1">This list item should have a green background. because its ID is "t1"</li> >+ <li id="t2">This list item should have a green background. because its ID is "t2"</li> >+ <li id="t3"><span id="t44">This list item should have a green background. because the inner SPAN does not match "#t4"</span></li> >+</ul> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-150.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-150.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5af3b88b1253a3ff52bc87edfda4cccd7aca2f79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-150.xml >@@ -0,0 +1,17 @@ >+<csstest def=":empty pseudo-class and XML/SGML constructs" module="W3C Selectors" modulename="css3-modsel" number="150" rev="1.1" date="24-april-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address:empty { background: lime; } >+ address { background: red; margin: 0; height: 1em; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://www.w3.org/1999/xhtml"><!-- --><?test random PI?></address> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+ <p xmlns="http://www.w3.org/1999/xhtml">(Note: This test is based on unpublished errata.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-151.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-151.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..dee60a2045dedef271004825aa948b837536f6ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-151.xml >@@ -0,0 +1,16 @@ >+<csstest def=":empty pseudo-class and whitespace" module="W3C Selectors" modulename="css3-modsel" number="151" rev="1.0" date="15-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address { background: lime; margin: 0; height: 1em; } >+ address:empty { background: red; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://www.w3.org/1999/xhtml"> </address> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-152.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-152.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..77d8ee55b29d03be56e70a576cb95be3a1d9a121 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-152.xml >@@ -0,0 +1,16 @@ >+<csstest def=":empty pseudo-class and elements" module="W3C Selectors" modulename="css3-modsel" number="152" rev="1.0" date="15-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address { background: lime; margin: 0; height: 1em; } >+ address:empty { background: red; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://www.w3.org/1999/xhtml"><span/></address> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-153.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-153.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b9163a9339470d7ffe5d337a65f77fc0a8af805f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-153.xml >@@ -0,0 +1,17 @@ >+<csstest def=":empty pseudo-class and CDATA" module="W3C Selectors" modulename="css3-modsel" number="153" rev="1.1" date="24-april-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ address { background: red; margin: 0; height: 1em; display: block; } >+ address:empty { background: lime; } >+ .text { margin: -1em 0 0 0; } >+</cssrules> >+ >+<code> >+ <address xmlns="http://tests.example.org/xml-only/"></address> >+ <div class="text" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</div> >+ <p xmlns="http://www.w3.org/1999/xhtml">(Note: This test is based on unpublished errata.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-154.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-154.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0f822776af5572bc89c329c81a170b51a0b70506 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-154.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="154" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ p, { background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cf9a62869767cd2b61afa322f626f9c6b194f824 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="155" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ .5cm { background: red; } >+</cssrules> >+ >+<code> >+ <p class="5cm" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4c7f3531b0bce6608ece8ee0c189cc4a66761cf8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155a.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="155a" rev="1.0" date="27-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ .\5cm { background: red; } >+</cssrules> >+ >+<code> >+ <p class="5cm" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..36ea99926b0d93102f2d963bc3609b4d09703822 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="155b" rev="1.0" date="27-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ .two\ words { background: red; } >+ >+ /* the "." and "~=" forms match on a space separated list of words. >+ In such a list, a word containing a space can never match, since it >+ would by definition be two words. */ >+ >+</cssrules> >+ >+<code> >+ <p class="two words" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ba42bf6b2b5efa882e20ea507ea9b7c7af308f58 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155c.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="155c" rev="1.0" date="27-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ .one.word { background: red; } >+</cssrules> >+ >+<code> >+ <p class="one.word" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155d.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155d.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f604ceafac273d51a3a53c4c430a9bd9913301f9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155d.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="155d" rev="1.0" date="27-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .one\.word { background: lime; } >+ p { background: red; } >+</cssrules> >+ >+<code> >+ <p class="one.word" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9233997880e981958c31e509f5fbd978582c2dff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="156" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ foo & address, p { background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..149e6d0bcc262ea4c7c257215ec15a1f468dfdb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156b.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="156b" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ foo & address, p { background: red; } >+ p { background: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c5796d2930eb21a762b31fba60cde7229ec30afa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156c.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="156c" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ foo & address, p { background: red ! important; } >+ p { background: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-157.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-157.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..241b1d1aac50e1681d1d9cfb4bb8052df2bf051f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-157.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="157" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ [*=test] { background: red; } >+</cssrules> >+ >+<code> >+ <p class="test" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-158.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-158.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e8b37afa4b242e92db37fa095b090f813325cd5f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-158.xml >@@ -0,0 +1,14 @@ >+<csstest def="Syntax and parsing" module="W3C Selectors" modulename="css3-modsel" number="158" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ [*|*=test] { background: red; } >+</cssrules> >+ >+<code> >+ <p class="test" xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-159.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-159.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..19d1de75ff22d250c31a28708403919604f0fd8d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-159.xml >@@ -0,0 +1,16 @@ >+<csstest def="Syntax and parsing of new pseudo-elements" module="W3C Selectors" modulename="css3-modsel" number="159" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ ::selection { background: lime; } >+ :selection { background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">Try selecting some text in this document. It should be have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..07f9bc5e63020d3904c0d8974eb4336f1d4e29fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Multiple ID selectors" module="W3C Selectors" modulename="css3-modsel" number="15b" rev="1.1" date="29-may-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: green; color: white; } >+#test#fail { background: red; color: yellow; } >+#fail#test { background: red; color: yellow; } >+#fail { background: red; color: yellow; } >+div { background: red; color: yellow; } >+#pass#pass { background: green; color: white; } >+</cssrules> >+ >+<code> >+ <p id="test" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+ <div id="pass" xmlns="http://www.w3.org/1999/xhtml">This line should be green.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0cf3223cc0a00fc43f1fe6ab2c7ea6cf49a43828 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15c.xml >@@ -0,0 +1,30 @@ >+<csstest def="Multiple IDs" module="W3C Selectors" modulename="css3-modsel" number="15c" rev="1.1" date="24-february-2005" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+.warning { color: navy; } >+div { color: red; } >+#Aone#Atwo, #Aone#Athree, #Atwo#Athree { color: green; } >+p { color: green; } >+#Bone#Btwo, #Bone#Bthree, #Btwo#Bthree { color: red; } >+#Cone#Ctwo, #Cone#Cthree, #Ctwo#Cthree { color: red; } >+#Done#Dtwo, #Done#Dthree, #Dtwo#Dthree { color: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="warning">This test requires support for two or more of XHTML, xml:id, and DOM3 Core.</p> >+<div xmlns="http://www.w3.org/1999/xhtml" id="Aone" xml:id="Atwo" title="Athree">This line should be green.</div> >+ <p xmlns="http://www.w3.org/1999/xhtml" id="Bone" >This line should be green.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" xml:id="Ctwo" >This line should be green.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="Dthree">This line should be green.</p> >+ <script xmlns="http://www.w3.org/1999/xhtml" type="text/javascript"> >+ document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', 'div')[0].setIdAttribute('title', true); >+ document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', 'p')[3].setIdAttribute('title', true); >+ </script> >+ <!-- This test could also be done using a custom DOCTYPE with an internal subset, which would >+ then work in any XHTML UA. However, that requires massive changes to the generator scripts. >+ Better, if we need such a test, would be to special-case it and have 15d be a separate file. --> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-16.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-16.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ea4c9849b8a86c0db23b83ac280f1efb8707e69e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-16.xml >@@ -0,0 +1,17 @@ >+<csstest def=":link pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="16" rev="1.1" date="01-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<historyneeded/> >+ >+<cssrules>p.test a { background-color : red } >+p.test *:link { background-color : lime }</cssrules> >+ >+<code> >+<p class="test" xmlns="http://www.w3.org/1999/xhtml"> >+<a href="http://unvisited.example.org/css3-modsel-16/">This link should have green background.</a> >+(Don't follow this link.) >+</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-160.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-160.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..721d60af63fdd27527a7b6472fb7e2c9e0543f46 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-160.xml >@@ -0,0 +1,16 @@ >+<csstest def="Syntax and parsing of unknown pseudo-classes" module="W3C Selectors" modulename="css3-modsel" number="160" rev="1.0" date="20-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { background: lime; } >+ p:subject { background: red; } /* this is not valid CSS, and if UAs >+ implemented the experimental :subject pseudo-class they should have >+ used the :-vnd-ident syntax. */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-161.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-161.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d4a9233df2f8605bbd670a7f2136a8fcaa1b1e8a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-161.xml >@@ -0,0 +1,47 @@ >+<csstest def="Syntax and parsing of unknown pseudo-classes and pseudo-elements" module="W3C Selectors" modulename="css3-modsel" number="161" rev="1.2" date="9-november-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ p { background: lime; } >+ p * { background: lime; } >+ p > * { background: lime; } >+ p + * { background: lime; } >+ p ~ * { background: lime; } >+ >+ /* let's try some pseudos that are not valid CSS but are likely to >+ be implemented as extensions in some UAs. These should not be >+ recognised, as UAs implementing such extensions should use the >+ :-vnd-ident syntax. */ >+ >+ :canvas { background: red; } >+ :viewport { background: red; } >+ :window { background: red; } >+ :menu { background: red; } >+ :table { background: red; } >+ :select { background: red; } >+ ::canvas { background: red; } >+ ::viewport { background: red; } >+ ::window { background: red; } >+ ::menu { background: red; } >+ ::table { background: red; } >+ ::select { background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should have a green background.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml"> >+ UAs may render the following element as a pop up menu. If so, please ensure the menu is unstyled (or green). >+ <select size="1"> >+ <option>This should</option> >+ <option>have a green</option> >+ <option>background.</option> >+ </select> >+ </p> >+ <table xmlns="http://www.w3.org/1999/xhtml"><tr><td>This line should have a green background (or it might be unstyled).</td></tr></table> >+ <!-- only allowed to be unstyled if + and ~ are not supported --> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-162.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-162.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..b81ef952c64ff305d6389ac4063502bb69f49d82 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-162.xml-removed >@@ -0,0 +1,97 @@ >+<csstest def="Contextual ::selection" module="W3C Selectors" modulename="css3-modsel" number="162" rev="1.1" date="29-may-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ >+<!-- >+ foo::selection matches the part of <foo> that has the selection. >+ *::selection matches the parts of every element that have the selection. >+ >+ The following properties definitely apply to ::selection: >+ color >+ background-color >+ outline >+ cursor >+ ? >+ >+ This is quite a thorough test IMHO. :-) >+ --> >+ >+ td > div { border: solid thick black; padding: 1em; line-height: 2; } >+ td > div > span { padding: 0.25em; } >+ >+ /* test version */ >+ .test > * { background: aqua; } >+ .test > div > ::selection { outline: solid thick green; } >+ .test > div > :nth-child(even)::selection { outline: solid thick yellow; } >+ .test > div > :empty::selection { outline: solid thick blue; background: red; } >+ .test > div *::selection { background: transparent; } /* applies to spans 4 to 6 and the strong */ >+ .test span:first-child::selection { background: white; } /* selects "Cascadable" */ >+ .test span[id=b]::selection { background: silver; } /* selects "Advanced" */ >+ .test #b + * + * { background: green; color: white; } /* affects "Selectors"'s span, whose selection inherits the background-color (next rule) */ >+ .test span[id=b] ~ ::selection { background: inherit; color: inherit; } /* selects "Tree", "Selectors" and "for CSS" but is overriden for "Tree" and "for CSS" */ >+ .test span[id=b] + ::selection { background: yellow; cursor: crosshair; } /* selects "Tree" */ >+ .test :not(#b):last-child::selection { background: transparent; } /* selects "for CSS" and "CSS" */ >+ .test ::selection { color: black; } /* applies to all spans and the strong */ >+ .test::selection { background: red ! important; } /* applies to the text in the cell and the div... so nothing. */ >+ .test::selection { color: red ! important; background: aqua; } /* should end up doing nothing - no text at that level and background is aqua is already the background */ >+ .test strong { color: red ! important; } /* should also end up doing nothing */ >+ >+ /* control version */ >+ .control ::selection { background: transparent; color: inherit; cursor: inherit; outline: none; } >+ .control > div { background: aqua; color: black; } >+ .control > div > span { padding: 0; margin: 0.25em; } >+ .control > div > span.a { background: white; } >+ .control > div > span.b { background: silver; } >+ .control > div > span.c { background: yellow; cursor: crosshair; } >+ .control > div > span.d { background: green; color: white; padding: 0.25em; margin: 0; } >+ .control > div > span.green { outline: solid thick green; } >+ .control > div > span.yellow { outline: solid thick yellow; } >+ .control > div > span.blue { outline: solid thick blue; background: red; } >+ >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <p>Select everything in this document. The following two constructs >+ (in the thick black borders) should end up looking identical. You >+ should also check that the cursor is the same on equivalent parts >+ (in particular the cursor should either be a crosshair over "Tree" >+ and the default everywhere else, or the default everywhere).</p> >+ >+ <table> >+ <tr> >+ <td class="test"> >+ >+ <div> >+ <span>Cascadable</span> >+ <span id="b">Advanced</span> >+ <span>Tree</span> >+ <span>Selectors</span> >+ <span><!-- empty --></span> >+ <span>for <strong>CSS</strong></span> >+ </div> >+ >+ </td> >+ <td class="control"> >+ >+ <div> >+ <span class="a green">Cascadable</span> >+ <span class="b yellow">Advanced</span> >+ <span class="c green">Tree</span> >+ <span class="d yellow">Selectors</span> >+ <span class="e blue"/> >+ <span class="f yellow">for <strong>CSS</strong></span> >+ </div> >+ >+ </td> >+ </tr> >+ </table> >+ </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..88deffac63ec72b3d19c72a892d41fc10a922b18 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed >@@ -0,0 +1,20 @@ >+<csstest def="Contextual :contains" module="W3C Selectors" modulename="css3-modsel" number="163" rev="1.0" date="21-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ .float { float: right; } >+ :hover ~ :contains('green') { background: green; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="float">TEST</p> >+ <p xmlns="http://www.w3.org/1999/xhtml">TEST</p> >+ <p xmlns="http://www.w3.org/1999/xhtml"><strong>TEST</strong></p> >+ <table xmlns="http://www.w3.org/1999/xhtml"><tr><td>TEST</td></tr></table> >+ <p xmlns="http://www.w3.org/1999/xhtml">While you hover over any of the four instances of the word TEST above, this paragraph should turn green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-164.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-164.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..2c26d874176852561f13b049b300fe4d7136f23a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-164.xml-removed >@@ -0,0 +1,38 @@ >+<csstest def=":focus with ::selection" module="W3C Selectors" modulename="css3-modsel" number="164" rev="1.0" date="21-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ textarea { border: solid thick gray; } >+ textarea:focus { border: solid thick green; } >+ textarea::selection { background: silver; color: black; } >+ textarea:focus::selection { background: lime; color: black; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><textarea rows="5" cols="70" >+>Select some of this text, then change the focus around. While this >+text is focussed, the selection should be green. While the focus is >+elsewhere, the selection should be silver. The border should at all >+times be a darker colour than the selection's background. Repeat the >+test with everything selected.</textarea></p> >+ >+ <p xmlns="http://www.w3.org/1999/xhtml">CONFORMANCE NOTE: If the UA >+ removes the selection when the focus leaves the text, which is also >+ valid behaviour, then the description above is inaccurate. In these >+ cases, the selection should disappear completely when the focus is >+ moved, and when the focus is returned, the selection should not be >+ in the same place as when focus was removed (typically, either the >+ selection will be non-existent, or everything will be selected -- >+ but what is selected is independent of what was selected when the >+ focus was removed).</p> >+ >+ <p xmlns="http://www.w3.org/1999/xhtml">If the selection is >+ preserved, then the selection should NOT disappear when focus is >+ removed, it should instead turn silver as described.</p> >+ >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-165.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-165.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..c2d16df2d79345c01ef0322a52b3c45ea6c7b2ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-165.xml-removed >@@ -0,0 +1,24 @@ >+<csstest def=":hover with ::selection" module="W3C Selectors" modulename="css3-modsel" number="165" rev="1.0" date="21-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ p { border: solid thick gray; } >+ p:hover { border: solid thick green; } >+ p::selection { background: silver; color: black; } >+ p:hover::selection { background: lime; color: black; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">Select some of this >+ paragraph, then move your pointing device around. While it is above >+ the paragraph, the selection should be green. While the pointing >+ device is elsewhere, the selection should be silver. The >+ paragraph's border should at all times be a darker colour than the >+ selection's background. Repeat the test with everything >+ selected.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2b5ede8f529a13c1656d0cccad2e758056b52911 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166.xml >@@ -0,0 +1,14 @@ >+<csstest def=":first-letter with ::first-letter" module="W3C Selectors" modulename="css3-modsel" number="166" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p:first-letter { background-color: red; } >+ p::first-letter { background-color: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">The first letter of this paragraph should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..141d6cfa09ff897250b9be83fb5290a437379e70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166a.xml >@@ -0,0 +1,14 @@ >+<csstest def=":first-letter with ::first-letter" module="W3C Selectors" modulename="css3-modsel" number="166a" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p::first-letter { background-color: red; } >+ p:first-letter { background-color: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">The first letter of this paragraph should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..28809de1351181c453b0af8d0dbe568debef1909 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167.xml >@@ -0,0 +1,14 @@ >+<csstest def=":first-line with ::first-line" module="W3C Selectors" modulename="css3-modsel" number="167" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p:first-line { background-color: red; } >+ p::first-line { background-color: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">The first line of this paragraph should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1bff3b132ea852b96a1c6bc65f8e07961740e375 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167a.xml >@@ -0,0 +1,14 @@ >+<csstest def=":first-line with ::first-line" module="W3C Selectors" modulename="css3-modsel" number="167a" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p::first-line { background-color: red; } >+ p:first-line { background-color: lime; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">The first line of this paragraph should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9cc9bbebb13a9c835626910e7a0b6283eecfcbfc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168.xml >@@ -0,0 +1,15 @@ >+<csstest def=":before with ::before" module="W3C Selectors" modulename="css3-modsel" number="168" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ span:before { background-color: red; content: 'FAILED'; } >+ span::before { background-color: lime; content: 'PASSED'; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This test has <span/>.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml">(If the previous line just reads "This test has ." then this test has failed.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8332c3345c514fa144b1d60e738843ad1826638d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168a.xml >@@ -0,0 +1,15 @@ >+<csstest def=":before with ::before" module="W3C Selectors" modulename="css3-modsel" number="168a" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ span::before { background-color: red; content: 'FAILED'; } >+ span:before { background-color: lime; content: 'PASSED'; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This test has <span/>.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml">(If the previous line just reads "This test has ." then this test has failed.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0579bc96e6029e409b73a03d2084c6dfdf99678e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169.xml >@@ -0,0 +1,15 @@ >+<csstest def=":after with ::after" module="W3C Selectors" modulename="css3-modsel" number="169" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ span:after { background-color: red; content: 'FAILED'; } >+ span::after { background-color: lime; content: 'PASSED'; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This test has <span/>.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml">(If the previous line just reads "This test has ." then this test has failed.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f39e6b530bc2f786a6876b1cc191fddd41c16343 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169a.xml >@@ -0,0 +1,15 @@ >+<csstest def=":after with ::after" module="W3C Selectors" modulename="css3-modsel" number="169a" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ span::after { background-color: red; content: 'FAILED'; } >+ span:after { background-color: lime; content: 'PASSED'; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This test has <span/>.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml">(If the previous line just reads "This test has ." then this test has failed.)</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-17.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-17.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8203771cf1cb1afb05ee385555c7607bc9a72052 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-17.xml >@@ -0,0 +1,17 @@ >+<csstest def=":visited pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="17" rev="1.1" date="01-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<historyneeded/> >+ >+<cssrules>p.test a { background-color : red } >+p.test *:visited { background-color : lime }</cssrules> >+ >+<code> >+<p class="test" xmlns="http://www.w3.org/1999/xhtml"> >+<a href="http://www.w3.org/">You should see a green background assigned by the anchor.</a> >+(Note: You must have visited http://www.w3.org/ for this test to be valid.) >+</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2feb3cf9c49c27a03e239df16dd4e336d6d41e80 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170.xml >@@ -0,0 +1,14 @@ >+<csstest def="Long chains of selectors" module="W3C Selectors" modulename="css3-modsel" number="170" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ span { color: red; } >+ span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span, span { color: green } /* 2049 */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><span>This line should be green.</span></p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..749bb0709cdb2ee988169527d24dbd5abe997f2b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170a.xml >@@ -0,0 +1,14 @@ >+<csstest def="Long chains of selectors" module="W3C Selectors" modulename="css3-modsel" number="170a" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .span { color: red; } >+ .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span, .span { color: green } /* 2049 */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="span">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c0f6887cf09acb28b1e74a3c84d75241228f6c85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170b.xml >@@ -0,0 +1,14 @@ >+<csstest def="Long chains of selectors" module="W3C Selectors" modulename="css3-modsel" number="170b" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .span { color: red; } >+ .span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span.span { color: green } /* 2049 */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="span">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b8c68bd6135a7fdf09c0945a190d5299814f99ed >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170c.xml >@@ -0,0 +1,14 @@ >+<csstest def="Long chains of selectors" module="W3C Selectors" modulename="css3-modsel" number="170c" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p.span { color: red; } >+ p:not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span):not(.span) { color: green } /* 2049 */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170d.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170d.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5d79d1ff45e0df916a589d26a9e25b63faf737d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170d.xml >@@ -0,0 +1,14 @@ >+<csstest def="Long chains of selectors" module="W3C Selectors" modulename="css3-modsel" number="170d" rev="1.0" date="1-january-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: red; } >+ p:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child:first-child { color: green } /* 2049 */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-171.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-171.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..df876299aa35317c29a741689ff2c37079ae454e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-171.xml >@@ -0,0 +1,16 @@ >+<csstest def="Classes: XHTML global class attribute" module="W3C Selectors" modulename="css3-modsel" number="171" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ .fail { color: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> >+ <span xhtml:class="fail">This should be green.</span> >+ </p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4bd56220d1ba1bd9bd1b480dd14836192be97c22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172a.xml >@@ -0,0 +1,28 @@ >+<csstest def="Namespaced attribute selectors" module="W3C Selectors" modulename="css3-modsel" number="172a" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ tests, tests * { display: block; color: green; } >+ testA[|attribute] { color: red; } >+ testB[|attribute="fail"] { color: red; } >+ testC[|attribute~="fail"] { color: red; } >+ testD[|attribute^="fail"] { color: red; } >+ testE[|attribute*="fail"] { color: red; } >+ testF[|attribute$="fail"] { color: red; } >+ testG[|attribute|="fail"] { color: red; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA test:attribute="fail">This should be green.</testa> >+ <testB test:attribute="fail">This should be green.</testb> >+ <testC test:attribute="fail">This should be green.</testc> >+ <testD test:attribute="fail">This should be green.</testd> >+ <testE test:attribute="fail">This should be green.</teste> >+ <testF test:attribute="fail">This should be green.</testf> >+ <testG test:attribute="fail">This should be green.</testg> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b3e5875f7551745b4151047700d2dea483615962 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172b.xml >@@ -0,0 +1,29 @@ >+<csstest def="Namespaced attribute selectors" module="W3C Selectors" modulename="css3-modsel" number="172b" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ @namespace url(http://css.example.net/); >+ tests, tests * { display: block; color: green; } >+ testA[|attribute] { color: red; } >+ testB[|attribute="fail"] { color: red; } >+ testC[|attribute~="fail"] { color: red; } >+ testD[|attribute^="fail"] { color: red; } >+ testE[|attribute*="fail"] { color: red; } >+ testF[|attribute$="fail"] { color: red; } >+ testG[|attribute|="fail"] { color: red; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA test:attribute="fail">This should be green.</testa> >+ <testB test:attribute="fail">This should be green.</testb> >+ <testC test:attribute="fail">This should be green.</testc> >+ <testD test:attribute="fail">This should be green.</testd> >+ <testE test:attribute="fail">This should be green.</teste> >+ <testF test:attribute="fail">This should be green.</testf> >+ <testG test:attribute="fail">This should be green.</testg> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..060f4e0872e3e533a9c846be53c67758cabce45e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173a.xml >@@ -0,0 +1,28 @@ >+<csstest def="Namespaced attribute selectors" module="W3C Selectors" modulename="css3-modsel" number="173a" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ tests, tests * { display: block; color: red; } >+ testA[*|attribute] { color: green; } >+ testB[*|attribute="pass"] { color: green; } >+ testC[*|attribute~="pass"] { color: green; } >+ testD[*|attribute^="pass"] { color: green; } >+ testE[*|attribute*="pass"] { color: green; } >+ testF[*|attribute$="pass"] { color: green; } >+ testG[*|attribute|="pass"] { color: green; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA test:attribute="pass">This should be green.</testa> >+ <testB test:attribute="pass">This should be green.</testb> >+ <testC test:attribute="pass">This should be green.</testc> >+ <testD test:attribute="pass">This should be green.</testd> >+ <testE test:attribute="pass">This should be green.</teste> >+ <testF test:attribute="pass">This should be green.</testf> >+ <testG test:attribute="pass">This should be green.</testg> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7c5ad0827ead85b3b06d992730443d8a21a3811d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173b.xml >@@ -0,0 +1,28 @@ >+<csstest def="Namespaced attribute selectors" module="W3C Selectors" modulename="css3-modsel" number="173b" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ tests, tests * { display: block; color: red; } >+ testA[*|attribute] { color: green; } >+ testB[*|attribute="pass"] { color: green; } >+ testC[*|attribute~="pass"] { color: green; } >+ testD[*|attribute^="pass"] { color: green; } >+ testE[*|attribute*="pass"] { color: green; } >+ testF[*|attribute$="pass"] { color: green; } >+ testG[*|attribute|="pass"] { color: green; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA attribute="pass">This should be green.</testa> >+ <testB attribute="pass">This should be green.</testb> >+ <testC attribute="pass">This should be green.</testc> >+ <testD attribute="pass">This should be green.</testd> >+ <testE attribute="pass">This should be green.</teste> >+ <testF attribute="pass">This should be green.</testf> >+ <testG attribute="pass">This should be green.</testg> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..80c7a2f553167916c5741b53f66f9316b9a957ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174a.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute selectors with multiple attributes" module="W3C Selectors" modulename="css3-modsel" number="174a" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ tests, tests * { display: block; color: red; } >+ testA[*|attribute="pass"] { color: green; } >+ testB[*|attribute="pass"] { color: green; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA attribute="pass" test:attribute="fail">This should be green.</testa> >+ <testB attribute="fail" test:attribute="pass">This should be green.</testb> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7044cfd6087f9af056ff16885b36138ea0ca0d85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174b.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED Attribute selectors with multiple attributes" module="W3C Selectors" modulename="css3-modsel" number="174b" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ tests, tests * { display: block; color: green } >+ testA:not([*|attribute="pass"]) { color: red; } >+ testB:not([*|attribute="pass"]) { color: red; } >+</cssrules> >+ >+<code> >+ <tests xmlns="http://css.example.net/" xmlns:test="http://css.example.net/"> >+ <testA attribute="pass" test:attribute="fail">This should be green.</testa> >+ <testB attribute="fail" test:attribute="pass">This should be green.</testb> >+ </tests> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6d74fd27a9de4585a82a774a37a60fb72a2daf55 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175a.xml >@@ -0,0 +1,14 @@ >+<csstest def="Parsing: Numbers in classes" module="W3C Selectors" modulename="css3-modsel" number="175a" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ .13 { color: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="13">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ea136a0cef352a267ea7b376f130e7886e9cedcc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175b.xml >@@ -0,0 +1,14 @@ >+<csstest def="Parsing: Numbers in classes" module="W3C Selectors" modulename="css3-modsel" number="175b" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ .\13 { color: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="13">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..dabde06c883570ad02cc6d9ba25dbc85fd88553d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175c.xml >@@ -0,0 +1,14 @@ >+<csstest def="Parsing: Numbers in classes" module="W3C Selectors" modulename="css3-modsel" number="175c" rev="1.0" date="20-september-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: red; } >+ .\31 \33 { color: green; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="13">This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-176.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-176.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b56202954fdaca943b1bbe7b56c574e2930779ea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-176.xml >@@ -0,0 +1,21 @@ >+<csstest def="Combinations: classes and IDs" module="W3C Selectors" modulename="css3-modsel" number="176" rev="1.0" date="6-december-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: red; color: yellow; } >+p:not(#other).class:not(.fail).test#id#id { background: green; color: white; } >+div { background: green; color: white; } >+div:not(#theid).class:not(.fail).test#theid#theid { background: red; color: yellow; } >+div:not(#other).notclass:not(.fail).test#theid#theid { background: red; color: yellow; } >+div:not(#other).class:not(.test).test#theid#theid { background: red; color: yellow; } >+div:not(#other).class:not(.fail).nottest#theid#theid { background: red; color: yellow; } >+div:not(#other).class:not(.fail).nottest#theid#other { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" id="id" class="class test">This line should be green.</p> >+ <div xmlns="http://www.w3.org/1999/xhtml" id="theid" class="class test">This line should be green.</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..27b39e8f06d618dffb29e2ede9df98e153d5dba2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177a.xml >@@ -0,0 +1,15 @@ >+<csstest def="Parsing : vs ::" module="W3C Selectors" modulename="css3-modsel" number="177a" rev="1.0" date="22-june-2003" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+ p:selection { color: yellow; background: red; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">When you select this text, it shouldn't go red.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fc78911553f0cd3ed1e99f4afc909d22d06a7f2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177b.xml >@@ -0,0 +1,16 @@ >+<csstest def="Parsing : vs ::" module="W3C Selectors" modulename="css3-modsel" number="177b" rev="1.0" date="22-june-2003" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ div { color: green; } >+ p::first-child { color: yellow; background: red; } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This line should be green.</p> >+ </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-178.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-178.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fc37aedc7612b2c521934f612bc5e4fe410f55bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-178.xml >@@ -0,0 +1,17 @@ >+<csstest def="Parsing: :not and pseudo-elements" module="W3C Selectors" modulename="css3-modsel" number="178" rev="1.0" date="22-june-2003" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ div { color: green; } >+ p:not(:first-line) { color: yellow; background: red; } >+ p:not(:after) { color: yellow; background: red; content: ' THIS TEST HAS FAILED! '; } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This line should be green.</p> >+ </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d18dbbfc40d989e6cc36838cc07c64daa7104f26 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179.xml >@@ -0,0 +1,15 @@ >+<csstest def="::first-line on inlines" module="W3C Selectors" modulename="css3-modsel" number="179" rev="1.0" date="29-february-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ span:first-line { background: red; color: yellow; font-size: 4em; } >+ span::first-line { background: red; color: yellow; font-size: 4em; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><span>This line should be green.</span></p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ff4361ab1adaeba3b17009bd3f8a35f12cd8ab27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179a.xml >@@ -0,0 +1,15 @@ >+<csstest def="::first-line after <br>" module="W3C Selectors" modulename="css3-modsel" number="179a" rev="1.0" date="29-february-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ p:first-line { background: red; color: yellow; font-size: 4em; } >+ p::first-line { background: red; color: yellow; font-size: 4em; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><br/>This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..482f86d57aee885974bb51ee8777bd7b15024d7a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18.xml >@@ -0,0 +1,62 @@ >+<csstest def=":hover pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="18" rev="1.2" date="20-october-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>p:hover { background-color : lime } >+a:hover { background-color : lime } >+ >+tr:hover { background-color : green } >+td:hover { background-color : lime } >+ >+table { border-spacing: 5px; }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">The background color of this paragraph should turn to green when >+ the mouse pointer hovers either its text (<strong>here</strong>) or its whitespace background, <strong>here</strong>:</p> >+<address xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="#foo">this anchor (<strong>here</strong>)</a> should turn to green when the pointing device hovers over it.</address> >+<table xmlns="http://www.w3.org/1999/xhtml"> >+ <tbody> >+ <tr> >+ <td>The cells in</td> >+ <td>this table</td> >+ <td>should go</td> >+ </tr> >+ <tr> >+ <td>green when</td> >+ <td>you hover</td> >+ <td>the pointing</td> >+ </tr> >+ <tr> >+ <td>device over</td> >+ <td>them (<strong>here</strong>).</td> >+ <td></td> >+ </tr> >+ <tr> >+ <td>The rows in</td> >+ <td>this table</td> >+ <td>should go</td> >+ </tr> >+ <tr> >+ <td>dark green</td> >+ <td>when the</td> >+ <td>pointing device</td> >+ </tr> >+ <tr> >+ <td>is over the</td> >+ <td>cells <strong>there</strong>:</td> >+ <td></td> <!-- remove this cell to make an evil test; row should still go green, but cell should not --> >+ </tr> >+ <tr> >+ <td>And <strong>here</strong>:</td> >+ <td></td> >+ <td>(blank cells).</td> >+ </tr> >+ </tbody> >+</table> >+</code> >+<!-- the row going green assumes that :hover is hierarchical, something that the spec >+explicitly does not require... --> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion >new file mode 100644 >index 0000000000000000000000000000000000000000..713e761b82f957db8996111fa0a6bd24a646bf79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion >@@ -0,0 +1,15 @@ >+<csstest def="::first-letter on inlines" module="W3C Selectors" modulename="css3-modsel" number="180" rev="1.1" date="10-november-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ span:first-letter { background: red; color: yellow; font-size: 4em; } >+ span::first-letter { background: red; color: yellow; font-size: 4em; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><span>This line should be green.</span></p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e76bb43776e2cfdf8e96e184bf825105f32b1d25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180a.xml >@@ -0,0 +1,15 @@ >+<csstest def="::first-letter after <br>" module="W3C Selectors" modulename="css3-modsel" number="180a" rev="1.0" date="29-february-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ p { color: green; } >+ p:first-letter { background: red; color: yellow; font-size: 4em; } >+ p::first-letter { background: red; color: yellow; font-size: 4em; } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><br/>This line should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-181.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-181.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..06a4662e78111698a81fb103c5ab6098c06daee6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-181.xml >@@ -0,0 +1,40 @@ >+<csstest def="Case sensitivity" module="W3C Selectors" modulename="css3-modsel" number="181" rev="1.0" date="1-march-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .cs { color: green; } >+ .cs P { background: red; color: yellow; } >+ .cs .a { background: red; color: yellow; } >+ .cs .span1 span { background: red; color: yellow; } >+ .cs .span2 { color: red; } >+ .cs .span2 SPAN { color: green; } >+ .cs .span2 span { background: red; color: yellow; } >+ .ci { color: red; } >+ .ci P { background: green; color: white; } >+ .ci .a { background: green; color: white; } >+ .ci .span1 span { background: green; color: white; } >+ .ci .span2 SPAN { background: green; color: white; } >+</cssrules> >+ >+<code xmlns:test="http://www.example.org/css3tests"> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<test:restrict for="xml xhtml"> >+ <div class="cs"> >+ <p>This line should be green.</p> >+ <p class="A">This line should be green.</p> >+ <p class="span1"><SPAN>This line should be green.</span></p> >+ <p class="span2"><SPAN>This line should be green.</span></p> >+ </div> >+</test:restrict> >+<test:restrict for="html"> >+ <div class="ci"> >+ <p>This line should be green.</p> >+ <p class="A">This line should be green.</p> >+ <p><SPAN>This line should be green.</span></p> >+ </div> >+</test:restrict> >+</div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-182.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-182.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f8212bf1cca73e4fd33340691c742f3c56e2c669 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-182.xml >@@ -0,0 +1,18 @@ >+<csstest def="Namespaces and \: in selectors" module="W3C Selectors" modulename="css3-modsel" number="182" rev="1.0" date="2-march-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { color: green; } >+foo\:bar { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<foo:bar xmlns:foo="http://www.example.org/"> >+This text should be green. >+</foo:bar> >+</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-183.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-183.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..03de4bcaec54f24b024f214812ba384ecd0d34e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-183.xml >@@ -0,0 +1,21 @@ >+<csstest def="Syntax and parsing of class selectors" module="W3C Selectors" modulename="css3-modsel" number="183" rev="1.0" date="24-april-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { color: green; } >+..test { background: red; color: yellow; } >+.foo..quux { background: red; color: yellow; } >+.bar. { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="test">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml" class=".test">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml" class="foo">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml" class="foo quux">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml" class="foo quux">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml" class=" bar ">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e6da5a1a98457fb4a97e29bd75c4368a1f5161fc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184a.xml >@@ -0,0 +1,15 @@ >+<csstest def="Ends-with attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184a" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: lime; } >+p[class$=""] { color: red; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b2230ede04ea29dbbeaa1e62c638246bf0aa1ed8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184b.xml >@@ -0,0 +1,15 @@ >+<csstest def="Starts-with attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184b" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: lime; } >+p[class^=""] { color: red; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b04d44185108b37aa718c639b717c24dbb9c2188 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184c.xml >@@ -0,0 +1,15 @@ >+<csstest def="Contains attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184c" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: lime; } >+p[class*=""] { color: red; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184d.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184d.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4e38023ea429d22dd9c39a4819e79026ece67e37 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184d.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED ends-with attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184d" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: red; } >+p:not([class$=""]) { color: lime; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184e.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184e.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..6f96b7f77651f293ee32eea3ab23fd826c3be29f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184e.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED starts-with attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184e" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: red; } >+p:not([class^=""]) { color: lime; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184f.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184f.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..a9593f8dc4fa23a85308fab561bb7759d818561b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184f.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED contains attribute selector with empty value" module="W3C Selectors" modulename="css3-modsel" number="184f" rev="1.0" date="30-october-2008" xmlns="http://www.example.org/css3tests"> >+ >+<author>Lachlan Hunt</author> >+ >+<cssrules> >+p { color: red; } >+p:not([class*=""]) { color: lime; } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml" class="">This text should be green.</p> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..70b168a3a5b66c5aa5388c7d84e1bcfccf556393 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18a.xml >@@ -0,0 +1,24 @@ >+<csstest def=":hover pseudo-class on links" module="W3C Selectors" modulename="css3-modsel" number="18a" rev="1.0" date="29-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+p { color: navy; } >+ >+.a a:hover { background: green; color: white; } >+ >+.b a:hover { background: red; color: yellow; } >+.b a:link { background: green; color: white; } >+ >+.c :link { background: green; color: white; } >+.c :visited:hover { background: red; color: yellow; } >+</cssrules> >+ >+<code> >+<p class="a" xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="#foo">this anchor (<strong>here</strong>)</a> should turn to green when the pointing device hovers over it.</p> >+<p class="b" xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="#foo">this anchor (<strong>here</strong>)</a> should <strong>remain green when you hover it</strong>.</p> >+<p class="c" xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="http://link.example.com/">this anchor (<strong>here</strong>)</a> should <strong>remain green when the pointing device hovers over it</strong> (do not follow that link).</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b57cbfb25d0107c553779d796530cdfd7b773762 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18b.xml >@@ -0,0 +1,19 @@ >+<csstest def=":hover pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="18b" rev="1.1" date="03-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>div:hover > p:first-child { background-color : lime }</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>The background color of this paragraph should turn to green when the mouse pointer hovers over any of the following:<br/><strong>This text.</strong></p> >+ <p>This text.</p> >+ <table><tr><td><table><tr><td><dl><dt>This text.</dt><dd>This text.</dd></dl></td></tr></table></td></tr><tr><td>This text.</td></tr></table> >+ <p><sub>This text.</sub></p> >+ <p>...and anything else between the top of the first paragraph and the bottom of this paragraph.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3d28e24bfa2ef5996b4a8ed2a495ff3a85601325 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18c.xml >@@ -0,0 +1,15 @@ >+<csstest def=":hover pseudo-class on links" module="W3C Selectors" modulename="css3-modsel" number="18c" rev="1.0" date="29-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules> >+:link, :visited { color: navy; text-decoration: none; } >+:link:hover span { background-color : lime } >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml"><a href="#foo">Hover <strong>here</strong> and the background of <span>this text should go green</span>.</a></p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5f348f242aaa29323867cb0a74fdd01bd195a2cc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19.xml >@@ -0,0 +1,15 @@ >+<csstest def=":active pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="19" rev="1.1" date="03-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>a:active { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="#foo">the anchor</a> >+ should turn to green when it is activated and come back to >+ normal when it is released.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19a.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19a.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..138c1fab50891745607c430300c89aadac0b54c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19a.xml-removed >@@ -0,0 +1,13 @@ >+<csstest def=":active pseudo-class on blocks" module="W3C Selectors" modulename="css3-modsel" number="19a" rev="1.0" date="29-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>p { color: navy; } >+p:active { background: red; color: yellow; font-size: 2em; }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">Clicking this paragraph should have no effect.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9c3683c327cc453eaecaf4ceab0daf06b58bf4af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19b.xml >@@ -0,0 +1,12 @@ >+<csstest def=":active pseudo-class on controls" module="W3C Selectors" modulename="css3-modsel" number="19b" rev="1.0" date="29-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>button:active { background: green; color: white; }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"><button>Activating (e.g. holding the mouse button down on) this button should make it go green.</button></p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-2.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-2.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e06740a7d53c272d5ea29357c98ebca235653599 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-2.xml >@@ -0,0 +1,11 @@ >+<csstest def="Type element selectors" module="W3C Selectors" modulename="css3-modsel" number="2" rev="1.1" date="03-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>address { background-color: lime }</cssrules> >+ >+<code> >+<address xmlns="http://www.w3.org/1999/xhtml">This address element should have a green background.</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-20.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-20.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d6204affe156c4ff9b87e0d8448a203932f06c96 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-20.xml >@@ -0,0 +1,16 @@ >+<csstest def=":focus pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="20" rev="1.1" date="03-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>a:focus { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">The background color of <a href="#foo">anchors</a> >+ in this page should turn <a href="#foo">to green</a> when they have the >+ <a href="#foo">focus</a>.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..56b1a5f185ea009e504f6a808d74c51a656e24c1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21.xml >@@ -0,0 +1,22 @@ >+<csstest def=":target pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="21" rev="1.1" date="03-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>p:target { background-color : lime }</cssrules> >+<code> >+<p id="first" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled. >+ The background of the following paragraph should become green when >+ you follow <a href="#second">this link</a>.</p> >+<p id="second" xmlns="http://www.w3.org/1999/xhtml">This paragraph should initially be unstyled. >+ It should become green when you select the link above. When you select >+ <a href="#third">this link</a>, it should return to being unstyled and the >+ background of the paragraph below should become green.</p> >+<p id="third" xmlns="http://www.w3.org/1999/xhtml">This paragraph should initially be unstyled. >+ It should become green when you select the link above. When you follow >+ <a href="#missing">this link</a>, the three paragraphs >+ should all return to being unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fde26af08ac9634ee4655a22df68709965c70c7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21b.xml >@@ -0,0 +1,12 @@ >+<csstest def=":target pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="21b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { background-color: lime; } >+p:target { background-color: red; }</cssrules> >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This paragraph should be green.</p> >+</code> >+</csstest> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..a62a1518b126478164fe98b3340d0d504f06f341 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21c.xml >@@ -0,0 +1,12 @@ >+<csstest def=":target pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="21c" rev="1.2" date="24-january-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>:root { background-color: green; } >+:target { background-color: red; }</cssrules> >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml">This page should be green.</p> >+</code> >+</csstest> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-22.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-22.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5996160912dea2c114a46a0b7b544fa9871ce686 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-22.xml >@@ -0,0 +1,24 @@ >+<csstest def=":lang() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="22" rev="1.0" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>ul > li { background-color : red } >+li:lang(en-GB) { background-color : lime }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li lang="en-GB">This list item should be green because its language is >+ British English</li> >+ <li lang="en-GB-wa">This list item should be green because its language >+ is British English (Wales)</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li lang="en-US">This list item should NOT be green because its language >+ is US English</li> >+ <li lang="fr">This list item should NOT be green because its language is >+ French</li> >+</ol> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-23.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-23.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9c10294fa6d0b6437ad19f6fe505e8f92b14fd09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-23.xml >@@ -0,0 +1,18 @@ >+<csstest def=":enabled pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="23" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>button { background-color : red } >+input { background-color : red } >+button:enabled { background-color : lime } >+input:enabled { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+ <button>A button (enabled) with green background</button> >+ <br/> >+ <input type="text" size="36" value="a text area (enabled) with green background"/> >+</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-24.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-24.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cd109dfea19a14f5a59d29c7bdc99834ec1893ee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-24.xml >@@ -0,0 +1,18 @@ >+<csstest def=":disabled pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="24" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>button { background-color : red } >+input { background-color : red } >+button:disabled { background-color : lime } >+input:disabled { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+ <button disabled="disabled">A button (disabled) with green background</button> >+ <br/> >+ <input disabled="disabled" type="text" size="36" value="a text area (disabled) with green background"/> >+</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-25.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-25.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..aea599d761b8606702cb56e4d1f9914f073b5b66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-25.xml >@@ -0,0 +1,14 @@ >+<csstest def=":checked pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="25" rev="1.1" date="29-may-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>input, span { background-color : red } >+input:checked, input:checked + span { background-color : lime} >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<input type="checkbox" checked="checked"/> <span>Everything in this paragraph should have a green background</span></p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3d9f31b6f4d269199c724e112a03d7b80bcfc380 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27.xml >@@ -0,0 +1,10 @@ >+<csstest def=":root pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="27" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>html { background-color : red } >+*:root { background-color: lime }</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">The background of the document should be green</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9c8cad695b2f8902a338abe5e66c1ad11b3eb6cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27a.xml >@@ -0,0 +1,24 @@ >+<csstest def="Impossible rules (:root:first-child, etc)" module="W3C Selectors" modulename="css3-modsel" number="27a" rev="1.0" date="19-october-2005" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+:root:first-child { background-color: red; } >+:root:last-child { background-color: red; } >+:root:only-child { background-color: red; } >+:root:nth-child(1) { background-color: red; } >+:root:nth-child(n) { background-color: red; } >+:root:nth-last-child(1) { background-color: red; } >+:root:nth-last-child(n) { background-color: red; } >+:root:first-of-type { background-color: red; } >+:root:last-of-type { background-color: red; } >+:root:only-of-type { background-color: red; } >+:root:nth-of-type(1) { background-color: red; } >+:root:nth-of-type(n) { background-color: red; } >+:root:nth-last-of-type(1) { background-color: red; } >+:root:nth-last-of-type(n) { background-color: red; } >+p { color: green; }</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This line should be green (there should be no red on this page).</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7045d492b7d0e24c53fb74ed98965626a07c005c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27b.xml >@@ -0,0 +1,11 @@ >+<csstest def="Impossible rules (* html, * :root)" module="W3C Selectors" modulename="css3-modsel" number="27b" rev="1.0" date="17-october-2005" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules>* html { background-color: red; } >+* :root { background-color: red; } >+p { color: green; }</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This line should be green (there should be no red on this page).</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7972d5dfc0c8c69887e614ff722cb3459bbc4ade >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28.xml >@@ -0,0 +1,95 @@ >+<csstest def=":nth-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="28" rev="1.0" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+ul > li:nth-child(odd) { background-color : lime } >+ol > li:nth-child(even) { background-color : lime } >+table.t1 tr:nth-child(-n+4) { background-color : lime } >+table.t2 td:nth-child(3n+1) { background-color : lime }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="red">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="red">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="red">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="red">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="red">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="red">This sixth list item should have a green background</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr class="red"> >+<td>Green row : 1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr> >+<td>5.1</td> >+<td>5.2</td> >+<td>5.3</td> >+</tr> >+ <tr> >+<td>6.1</td> >+<td>6.2</td> >+<td>6.3</td> >+</tr> >+</table> >+ >+<table class="t2" border="1"> >+ <tr> >+<td class="red">green cell</td> >+<td>1.2</td> >+<td>1.3</td> >+ <td class="red">green cell</td> >+<td>1.5</td> >+<td>1.6</td> >+ <td class="red">green cell</td> >+<td>1.8</td> >+</tr> >+ <tr> >+<td class="red">green cell</td> >+<td>2.2</td> >+<td>2.3</td> >+ <td class="red">green cell</td> >+<td>2.5</td> >+<td>2.6</td> >+ <td class="red">green cell</td> >+<td>2.8</td> >+</tr> >+ <tr> >+<td class="red">green cell</td> >+<td>3.2</td> >+<td>3.3</td> >+ <td class="red">green cell</td> >+<td>3.5</td> >+<td>3.6</td> >+ <td class="red">green cell</td> >+<td>3.8</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..21a5a5479e00c6fd844da18e5cff4986cf1ba0e0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28b.xml >@@ -0,0 +1,97 @@ >+<csstest def=":nth-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="28b" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime ! important } >+ul > li:nth-child(odd) { background-color : red } >+ol > li:nth-child(even) { background-color : red } >+table.t1 tr:nth-child(-n+4) { background-color : red } >+table.t2 td:nth-child(3n+1) { background-color : red }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="green">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="green">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="green">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="green">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="green">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="green">This sixth list item should have a green background</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr class="green"> >+<td>Green row : 1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr> >+<td>5.1</td> >+<td>5.2</td> >+<td>5.3</td> >+</tr> >+ <tr> >+<td>6.1</td> >+<td>6.2</td> >+<td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td class="green">green cell</td> >+<td>1.2</td> >+<td>1.3</td> >+ <td class="green">green cell</td> >+<td>1.5</td> >+<td>1.6</td> >+ <td class="green">green cell</td> >+<td>1.8</td> >+</tr> >+ <tr> >+<td class="green">green cell</td> >+<td>2.2</td> >+<td>2.3</td> >+ <td class="green">green cell</td> >+<td>2.5</td> >+<td>2.6</td> >+ <td class="green">green cell</td> >+<td>2.8</td> >+</tr> >+ <tr> >+<td class="green">green cell</td> >+<td>3.2</td> >+<td>3.3</td> >+ <td class="green">green cell</td> >+<td>3.5</td> >+<td>3.6</td> >+ <td class="green">green cell</td> >+<td>3.8</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28c.pl-draft b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28c.pl-draft >new file mode 100644 >index 0000000000000000000000000000000000000000..f8601068c0190271e60bc05062f77733cb9c34b5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28c.pl-draft >@@ -0,0 +1,32 @@ >+#!/usr/bin/perl -wT >+ >+print "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n"; >+nest(0, 5, 5, 'span'); >+print "</div>\n"; >+ >+:nth-child(-1n+6) :nth-child(-2) :nth-child(-2n-2) >+ >+sub nest { >+ my($indent, $remaining, $count, $element, @position) = @_; >+ ++$indent; >+ --$remaining; >+ for (my $index = 0; $index < $count; ++$index) { >+ if ($remaining > 1) { >+ print((' ' x $indent) . "<$element>\n"); >+ nest($indent, $remaining, $count, $element, @position, $index); >+ print((' ' x $indent) . "</$element>\n"); >+ } elsif ($remaining) { >+ print((' ' x $indent) . "<$element> "); >+ nest($indent, $remaining, $count, $element, @position, $index); >+ print "</$element>\n"; >+ } else { >+ my $class = tryToMatch(\@position, [nthChild(-1, 6), nthChild(0, -2), nthChild(-2, -2)]) ? 'match' : 'nomatch'; >+ print "<$element class="$class">Test</$element> "; >+ } >+ } >+} >+ >+sub nthChild { >+ my($position, $counts) = @_; >+ if >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f98b97fd105f90f0379b2f82d0a0bbee5ac690a0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29.xml >@@ -0,0 +1,97 @@ >+<csstest def=":nth-last-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="29" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.red { background-color : red } >+ul > li:nth-last-child(odd) { background-color : green } >+ol > li:nth-last-child(even) { background-color : green } >+table.t1 tr:nth-last-child(-n+4) { background-color : green } >+table.t2 td:nth-last-child(3n+1) { background-color : green }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="red">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="red">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="red">This sixth list item should have a green background</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="red">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="red">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="red">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr> >+<td>1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 5.1</td> >+<td>5.2</td> >+ <td>5.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 6.1</td> >+<td>6.2</td> >+ <td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td>1.1</td> >+<td class="red">green cell</td> >+<td>1.3</td> >+ <td>1.4</td> >+<td class="red">green cell</td> >+<td>1.6</td> >+ <td>1.7</td> >+<td class="red">green cell</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td class="red">green cell</td> >+<td>2.3</td> >+ <td>2.4</td> >+<td class="red">green cell</td> >+<td>2.6</td> >+ <td>2.7</td> >+<td class="red">green cell</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td class="red">green cell</td> >+<td>3.3</td> >+ <td>3.4</td> >+<td class="red">green cell</td> >+<td>3.6</td> >+ <td>3.7</td> >+<td class="red">green cell</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..31e75b5b42bffaf380d07cad8c790f39fbdea645 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29b.xml >@@ -0,0 +1,97 @@ >+<csstest def=":nth-last-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="29b" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime ! important } >+ul > li:nth-last-child(odd) { background-color : red } >+ol > li:nth-last-child(even) { background-color : red } >+table.t1 tr:nth-last-child(-n+4) { background-color : red } >+table.t2 td:nth-last-child(3n+1) { background-color : red }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="green">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="green">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="green">This sixth list item should have a green background</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="green">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="green">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="green">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr> >+<td>1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 5.1</td> >+<td>5.2</td> >+ <td>5.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 6.1</td> >+<td>6.2</td> >+ <td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td>1.1</td> >+<td class="green">green cell</td> >+<td>1.3</td> >+ <td>1.4</td> >+<td class="green">green cell</td> >+<td>1.6</td> >+ <td>1.7</td> >+<td class="green">green cell</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td class="green">green cell</td> >+<td>2.3</td> >+ <td>2.4</td> >+<td class="green">green cell</td> >+<td>2.6</td> >+ <td>2.7</td> >+<td class="green">green cell</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td class="green">green cell</td> >+<td>3.3</td> >+ <td>3.4</td> >+<td class="green">green cell</td> >+<td>3.6</td> >+ <td>3.7</td> >+<td class="green">green cell</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..505efe86ba5d3d5a5c9561d00fe2234066ab49e6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3.xml >@@ -0,0 +1,23 @@ >+<csstest def="Universal selector" module="W3C Selectors" modulename="css3-modsel" number="3" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>* { color : lime } >+ul, p { color : red } >+*.t1 { color : lime } >+</cssrules> >+ >+<!-- this is a _non-namespace_ test! --> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<span class="t1">This paragraph, and all textual contents in the document, >+ should be green.</span> >+</p> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="t1">This item should be green.</li> >+</ul> >+<foo xmlns="http://www.example.org/a">And this element, part of a non-HTML namespace, >+ should be green too</foo> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-30.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-30.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..67ed015543ff148ea25905903298778ce0eb96d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-30.xml >@@ -0,0 +1,30 @@ >+<csstest def=":nth-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="30" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+p:nth-of-type(3) { background-color : lime } >+dl > :nth-of-type(3n+1) { background-color : lime } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph is here only to fill space in the DOM</p> >+<address xmlns="http://www.w3.org/1999/xhtml">And this address too..</address> >+<p xmlns="http://www.w3.org/1999/xhtml">So does this paragraph !</p> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">But this one should have green background</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt class="red">First definition term that should have green background</dt> >+ <dd class="red">First definition that should have green background</dd> >+ <dt>Second definition term</dt> >+ <dd>Second definition</dd> >+ <dt>Third definition term</dt> >+ <dd>Third definition</dd> >+ <dt class="red">Fourth definition term that should have green background</dt> >+ <dd class="red">Fourth definition that should have green background</dd> >+ <dt>Fifth definition term</dt> >+ <dd>Fifth definition</dd> >+ <dt>Sixth definition term</dt> >+ <dd>Sixth definition</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-31.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-31.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e8b9e373430b07ab5077f8f14f827d312cc08fce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-31.xml >@@ -0,0 +1,30 @@ >+<csstest def=":nth-last-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="31" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+p:nth-last-of-type(3) { background-color : lime } >+dl > :nth-last-of-type(3n+1) { background-color : lime } >+</cssrules> >+ >+<code> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background</p> >+<address xmlns="http://www.w3.org/1999/xhtml">But this address is here only to fill space in the dom..</address> >+<p xmlns="http://www.w3.org/1999/xhtml">So does this paragraph !</p> >+<p xmlns="http://www.w3.org/1999/xhtml">And so does this one too.</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt>First definition term</dt> >+ <dd>First definition</dd> >+ <dt>Second definition term</dt> >+ <dd>Second definition</dd> >+ <dt class="red">Third definition term that should have green background</dt> >+ <dd class="red">Third definition that should have green background</dd> >+ <dt>Fourth definition term</dt> >+ <dd>Fourth definition</dd> >+ <dt>Fifth definition term</dt> >+ <dd>Fifth definition</dd> >+ <dt class="red">Sixth definition term that should have green background</dt> >+ <dd class="red">Sixth definition that should have green background</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-32.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-32.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..362a42a5da9e2662c7586d7478e816d246104e1c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-32.xml >@@ -0,0 +1,33 @@ >+<csstest def=":first-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="32" rev="1.0" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+.t1 td:first-child { background-color : lime } >+p > *:first-child { background-color : lime } >+</cssrules> >+ >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table class="t1" border="1"> >+ <tr> >+ <td class="red">green cell</td> >+ <td>1.2</td> >+ <td>1.3</td> >+ </tr> >+ <tr> >+ <td class="red">green cell</td> >+ <td>2.2</td> >+ <td>2.3</td> >+ </tr> >+ <tr> >+ <td class="red">green cell</td> >+ <td>3.2</td> >+ <td>3.3</td> >+ </tr> >+</table> >+</div> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph contains some text >+ <span>and a span that should have a green background</span> >+</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-33.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-33.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..62b2398034b046f486e2b91f7619b963b43700ed >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-33.xml >@@ -0,0 +1,33 @@ >+<csstest def=":last-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="33" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+.t1 td:last-child { background-color : lime } >+p > *:last-child { background-color : lime } >+</cssrules> >+ >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table class="t1" border="1"> >+ <tr> >+ <td>1.1</td> >+ <td>1.2</td> >+ <td class="red">green cell</td> >+ </tr> >+ <tr> >+ <td>2.1</td> >+ <td>2.2</td> >+ <td class="red">green cell</td> >+ </tr> >+ <tr> >+ <td>3.1</td> >+ <td>3.2</td> >+ <td class="red">green cell</td> >+ </tr> >+</table> >+</div> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<span>This paragraph contains a span that should >+ have a green background</span> and some text after it.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-34.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-34.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1fe467a4e03788db95191db35bfa5ecaadc6cf09 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-34.xml >@@ -0,0 +1,16 @@ >+<csstest def=":first-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="34" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+address { margin-bottom : 1em ; margin-left : 1em } >+address:first-of-type { background-color : lime } >+</cssrules> >+ >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml">This div contains 3 addresses: >+<address class="red">A first address that should have a green background</address> >+<address>A second address with normal background</address> >+<address>A third address with normal background</address> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-35.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-35.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..91eba66224543238695e8d0c0f9678c4a0f8bbf7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-35.xml >@@ -0,0 +1,17 @@ >+<csstest def=":last-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="35" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.red { background-color : red } >+address { margin-bottom : 1em ; margin-left : 1em } >+address:last-of-type { background-color : lime } >+</cssrules> >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<address>A first address with normal background</address> >+<address>A second address with normal background</address> >+<address class="red">A third address that should have a green background</address> >+This div contains 3 addresses above this sentence.</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-36.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-36.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4873f20937833224b7eb1806697d4e82eb583c8a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-36.xml >@@ -0,0 +1,14 @@ >+<csstest def=":only-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="36" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+p:only-child { background-color : lime } >+div.testText > div > p { margin-left : 1em } >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph should have normal background</p> >+<div xmlns="http://www.w3.org/1999/xhtml">This div contains only one paragraph >+ <p class="red">This paragraph should have green background</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-37.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-37.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c660db6b789b5e2ec900346a75429a8af5178c38 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-37.xml >@@ -0,0 +1,14 @@ >+<csstest def=":only-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="37" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+.t1 :only-of-type { background-color : lime } >+</cssrules> >+<code> >+<div class="t1" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should have normal background</p> >+<address class="red">But this address should have green background</address> >+<p>This paragraph should have normal background</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-38.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-38.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ad0515a1628368a54fcdc68dcb2c18af2ec112b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-38.xml >@@ -0,0 +1,15 @@ >+<csstest def="::first-line pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="38" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>p:first-line { background-color : lime } >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This very long paragraph should have a >+ first line with green background. This very long paragraph should have a first >+ line with green background. This very long paragraph should have a first line >+ with green background. This very long paragraph should have a first line with >+ green background. This very long paragraph should have a first line with green >+ background. This very long paragraph should have a first line with green background. >+ This very long paragraph should have a first line with green background.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..a262929ac20fe7a50bd1846ed47f42b0829877c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39.xml >@@ -0,0 +1,32 @@ >+<csstest def="::first-letter pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="39" rev="1.2" date="17-september-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>p:first-letter { font-size : xx-large ; background-color : lime }</cssrules> >+ >+<code> >+ >+<p xmlns="http://www.w3.org/1999/xhtml">This very long paragraph >+should have a big first letter T with a green background. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text.</p> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..dcc1730d0ca9257f7173ae1f6893fa0899c45101 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39a.xml >@@ -0,0 +1,33 @@ >+<csstest def="::first-letter pseudo-element with ::before pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="39a" rev="1.2" date="9-november-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>p:first-letter { color: lime; font-size: xx-large; } >+p:before { color: red; content: 'T'; }</cssrules> >+ >+<code> >+ >+<p xmlns="http://www.w3.org/1999/xhtml">his very long paragraph should >+have a big green first letter T. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text.</p> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fd1a787ce2978d3b3ac1ca30f39668b57d6d8245 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39b.xml >@@ -0,0 +1,33 @@ >+<csstest def="::first-letter pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="39b" rev="1.1" date="17-september-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>p::first-letter { font-size : xx-large ; background-color : lime }</cssrules> >+ >+ >+<code> >+ >+<p xmlns="http://www.w3.org/1999/xhtml">This very long paragraph >+should have a big first letter T with a green background. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text.</p> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5832c074e542fbeb556e0f5cfe122a647e948dc1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39c.xml >@@ -0,0 +1,34 @@ >+<csstest def="::first-letter pseudo-element with ::before pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="39c" rev="1.2" date="9-november-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>p::first-letter { color: lime; font-size: xx-large; } >+ p::before { color: red; content: 'T'; }</cssrules> >+ >+<code> >+ >+<p xmlns="http://www.w3.org/1999/xhtml">his very long paragraph should >+have a big green first letter T. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text. Dummy text. Dummy >+text. Dummy text. Dummy text. Dummy text.</p> >+ >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2737ccc6dbc5ff12e7e1d2f02be1e10d4deb8e3f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3a.xml >@@ -0,0 +1,20 @@ >+<csstest def="Universal selector (no namespaces)" module="W3C Selectors" modulename="css3-modsel" number="3a" rev="1.0" date="3-november-2003" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>* { color : lime } >+ul, p { color : red } >+*.t1 { color : lime } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<span class="t1">This paragraph, and all textual contents in the document, >+ should be green.</span> >+</p> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="t1">This item should be green.</li> >+</ul> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-4.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-4.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1f8c1187b735f9282972e3e4c1f7945f06429a43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-4.xml >@@ -0,0 +1,11 @@ >+<csstest def="Omitted universal selector" module="W3C Selectors" modulename="css3-modsel" number="4" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>#foo { background-color : lime } >+p { background-color : red }</cssrules> >+ >+<code> >+<p id="foo" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-40.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-40.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..6422bfa4d3323baf9f4cf1aeacc4ef1603403566 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-40.xml-removed >@@ -0,0 +1,11 @@ >+<csstest def="::selection pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="40" rev="1.1" date="20-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<userinteraction/> >+<cssrules>p::selection { background-color : lime } >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">Any textual selection in this long paragraph should have green background. Any textual selection in this long paragraph should have green background. Any textual selection in this long paragraph should have green background.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1b54a0ad824370cbb273f33647f02bc6f7303450 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41.xml >@@ -0,0 +1,10 @@ >+<csstest def="::before pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="41" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p::before { background-color : lime ; content : "GENERATED CONTENT "} >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">You should see before this paragraph the words GENERATED CONTENT over green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9dda3c76ea1fb13e0bcc7dcf6ccaec577596a3ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41a.xml >@@ -0,0 +1,10 @@ >+<csstest def=":before pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="41a" rev="1.0" date="30-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p:before { background-color : lime ; content : "GENERATED CONTENT "} >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">You should see before this paragraph the words GENERATED CONTENT over green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..226b3d9d33ec82d8036dcd7826a64b2356a9b3d0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42.xml >@@ -0,0 +1,10 @@ >+<csstest def="::after pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="42" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p::after { background-color : lime ; content : "GENERATED CONTENT "} >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">You should see after this paragraph the words GENERATED CONTENT over green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42a.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42a.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b7b68750ad59b3cbc93248d5314416780d2cc8d9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42a.xml >@@ -0,0 +1,10 @@ >+<csstest def=":after pseudo-element" module="W3C Selectors" modulename="css3-modsel" number="42a" rev="1.0" date="30-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p:after { background-color : lime ; content : "GENERATED CONTENT "} >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">You should see after this paragraph the words GENERATED CONTENT over green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8453553fb9b37de031f2dd7ba0c68c4f286a6a87 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43.xml >@@ -0,0 +1,32 @@ >+<csstest def="Descendant combinator" module="W3C Selectors" modulename="css3-modsel" number="43" rev="1.1" date="05-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.white { background-color: transparent ! important; } >+.red { background-color: red; } >+div.t1 p { background-color: lime; }</cssrules> >+<code> >+ <div class="t1" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="red">This paragraph should have a green background</p> >+ <table> >+ <tbody> >+ <tr> >+ <td> >+ <p class="red">This paragraph should have a green background</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+ </div> >+ <table xmlns="http://www.w3.org/1999/xhtml"> >+ <tbody> >+ <tr> >+ <td> >+ <p class="white">This paragraph should be unstyled.</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..5707a2bb4399a2ce9daf3becb28e1e2667306429 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43b.xml >@@ -0,0 +1,32 @@ >+<csstest def="Descendant combinator" module="W3C Selectors" modulename="css3-modsel" number="43b" rev="1.1" date="05-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.white { background-color: transparent ! important; } >+.green { background-color: lime; } >+div.t1 p { background-color: red; }</cssrules> >+<code> >+ <div class="t1" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="white">This paragraph should be unstyled</p> >+ <table> >+ <tbody> >+ <tr> >+ <td> >+ <p class="white">This paragraph should be unstyled</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+ </div> >+ <table xmlns="http://www.w3.org/1999/xhtml"> >+ <tbody> >+ <tr> >+ <td> >+ <p class="green">This paragraph should have a green background</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bedc9840168780b6ac7561613e9ae1da1349d35f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44.xml >@@ -0,0 +1,27 @@ >+<csstest def="Child combinator" module="W3C Selectors" modulename="css3-modsel" number="44" rev="1.2" date="29-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.white { background-color: transparent ! important; } >+.red { background-color: red; } >+div > p.test { background-color: lime; }</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="red test">This paragraph should have a green background</p> >+ <div> >+ <p class="red test">This paragraph should have a green background</p> >+ </div> >+ </div> >+ <table xmlns="http://www.w3.org/1999/xhtml"> >+ <tbody> >+ <tr> >+ <td> >+ <p class="white test">This paragraph should be unstyled.</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d4df889b06d73534dd467af1ff626431c05dbf2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44b.xml >@@ -0,0 +1,27 @@ >+<csstest def="Child combinator" module="W3C Selectors" modulename="css3-modsel" number="44b" rev="1.1" date="05-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.white { background-color: transparent ! important; } >+.green { background-color: lime; } >+div > p.test { background-color: red; }</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="white test">This paragraph should be unstyled.</p> >+ <div> >+ <p class="white test">This paragraph should be unstyled.</p> >+ </div> >+ </div> >+ <table xmlns="http://www.w3.org/1999/xhtml"> >+ <tbody> >+ <tr> >+ <td> >+ <p class="green test">This paragraph should have a green background.</p> >+ </td> >+ </tr> >+ </tbody> >+ </table> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..90bc43abf7de99ec43b109f7a27bc6dbf9d72799 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44c.xml >@@ -0,0 +1,15 @@ >+<csstest def="Child combinator and classes" module="W3C Selectors" modulename="css3-modsel" number="44c" rev="1.1" date="21-june-2003" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .fail > div { background: red; color: yellow; } >+ .control { background: green; color: white; } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> This should be unstyled. </div> >+ <div xmlns="http://www.w3.org/1999/xhtml" class="control"> This should have a green background. </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44d.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44d.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..882f74a48dda75da465bcd90b3bf65ba52be8e51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44d.xml >@@ -0,0 +1,15 @@ >+<csstest def="Child combinatior and IDs" module="W3C Selectors" modulename="css3-modsel" number="44d" rev="1.0" date="21-november-2001" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ #fail > div { background: red; } >+ p { background: green; } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> This should be unstyled. </div> >+ <p xmlns="http://www.w3.org/1999/xhtml"> This should have a green background. </p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ed406c223ceee8f80077843cede8ae21f82b4e5c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45.xml >@@ -0,0 +1,18 @@ >+<csstest def="Direct adjacent combinator" module="W3C Selectors" modulename="css3-modsel" number="45" rev="1.1" date="05-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.red { background-color : red } >+div.stub > p + p { background-color : lime }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should be unstyled.</p> >+ <p class="red">But this one should have a green background.</p> >+ <p class="red">And this one should also have a green background.</p> >+ <address>This address is only here to fill some space between two paragraphs.</address> >+ <p>This paragraph should be unstyled.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b1cc9bba4bce0cd3d2f977ac6dd1bd84b533fca0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Direct adjacent combinator" module="W3C Selectors" modulename="css3-modsel" number="45b" rev="1.1" date="05-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color: lime; } >+.white { background-color: transparent ! important; } >+div.stub > p + p { background-color: red; }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="green">This paragraph should have a green background.</p> >+ <p class="white">But this one should be unstyled.</p> >+ <p class="white">And this one should also be unstyled.</p> >+ <address class="green">This address is only here to fill some space between two paragraphs and should have a green background.</address> >+ <p class="green">This paragraph should have a green background too.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45c.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45c.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..47ec8819a41527a9ef0470a59ff15530ced1a9e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45c.xml >@@ -0,0 +1,15 @@ >+<csstest def="Direct adjacent combinator and classes" module="W3C Selectors" modulename="css3-modsel" number="45c" rev="1.1" date="6-december-2002" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+ .fail + div { background: red; } >+ .control { background: lime; } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> This should be unstyled. </div> >+ <div xmlns="http://www.w3.org/1999/xhtml" class="control"> This should have a green background. </div> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..15c8ae2370f224dadb9c16b1a3e083f375297c01 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46.xml >@@ -0,0 +1,18 @@ >+<csstest def="Indirect adjacent combinator" module="W3C Selectors" modulename="css3-modsel" number="46" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.red { background-color : red } >+div.stub > p ~ p { background-color : lime }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should be unstyled.</p> >+ <p class="red">But this one should have a green background</p> >+ <p class="red">And this one should also have a green background</p> >+ <address>This address is only here to fill some space between two paragraphs</address> >+ <p class="red">This paragraph should have a green background</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..da34d40f623da70d1967fb0a249e408e107c685d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46b.xml >@@ -0,0 +1,18 @@ >+<csstest def="Indirect adjacent combinator" module="W3C Selectors" modulename="css3-modsel" number="46b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime ! important } >+div.stub > p ~ p { background-color : red }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should be unstyled.</p> >+ <p class="green">But this one should have a green background</p> >+ <p class="green">And this one should also have a green background</p> >+ <address>This address is only here to fill some space between two paragraphs</address> >+ <p class="green">This paragraph should have a green background</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-47.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-47.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b3a30d36daa4d6a71d89ca433584b893321e128a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-47.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED type element selector" module="W3C Selectors" modulename="css3-modsel" number="47" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>div.stub span, div.stub address, div.stub *|q, div.stub *|r { background-color: red; } >+address, *|q, *|r { display: block; margin: 1em; } >+div.stub *:not(p) { background-color: lime; }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p> >+ <span>The text in this paragraph should have a green background</span> >+ </p> >+ <address>This address should have a green background</address> >+ <q xmlns="http://www.example.org/a">This element in another namespace should have a green background.</q> >+ <r xmlns="">This element without a namespace should have a green background.</r> >+ <p>This paragraph should be unstyled.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-48.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-48.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..eff468f1532a2a8e29899f8e6517de5ba43aeb7a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-48.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED universal selector" module="W3C Selectors" modulename="css3-modsel" number="48" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { background-color : lime ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not(*) { background-color : red } >+/* yes, the rule just above selects nothing... That's the point */ >+</cssrules> >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<address>This address should have a green background</address> >+<s xmlns="http://www.example.org/b">This paragraph should have a green background</s> >+<t xmlns="">This paragraph should have a green background</t> >+<u xmlns="http://www.example.org/a">This paragraph should have a green background</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-49.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-49.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d55fbfc02a8eb073e6d7cbd36d0d42225b5c8c65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-49.xml >@@ -0,0 +1,21 @@ >+<csstest def="NEGATED omitted universal selector is forbidden" module="W3C Selectors" modulename="css3-modsel" number="49" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace html url(http://www.w3.org/1999/xhtml); >+@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub > *|* { background-color : lime ; display : block ; >+ margin-bottom : 1em } >+div.stub > *|*:not() { background-color : red } >+/* yes, the rule just above selects nothing... That's the point */ >+</cssrules> >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<address>This address should have a green background</address> >+<s xmlns="http://www.example.org/b">This paragraph should have a green background</s> >+<t xmlns="">This paragraph should have a green background</t> >+<u xmlns="http://www.example.org/a">This paragraph should have a green background</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-5.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-5.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..69153646c0187e936105f5ac9f5a064b1caa369b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-5.xml >@@ -0,0 +1,12 @@ >+<csstest def="Attribute existence selector" module="W3C Selectors" modulename="css3-modsel" number="5" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>p { background-color : red } >+p[title] { background-color : lime }</cssrules> >+ >+<code> >+<p title="title" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background because its TITLE >+ attribute is set.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-50.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-50.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e437ecc6a2d2810188ff2824038703b850e475f7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-50.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED attribute existence selector" module="W3C Selectors" modulename="css3-modsel" number="50" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+a|* { color : red ; display : block ; margin-bottom : 1em } >+div.stub *|*:not([test]) { color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q test="1" xmlns="http://www.example.org/a"> >+ <r>This text should be in green characters</r> >+</q> >+<s xmlns="http://www.example.org/a">This text should be in green characters</s> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-51.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-51.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c2476d13b9441f795538d2ebb38e6a483ba51742 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-51.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED attribute value selector" module="W3C Selectors" modulename="css3-modsel" number="51" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+div.stub > p {color : red } >+div.stub > a|* { color : red ; display : block ; margin-bottom : 1em } >+div.stub *|*:not([test="1"]) { color : lime }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q test="1" xmlns="http://www.example.org/a"> >+ <r test="11">This text should be</r> >+ <r>in green characters</r> >+</q> >+<s xmlns="http://www.example.org/a">This text should be in green characters</s> >+<p>This text should be in green characters</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-52.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-52.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ef1ae777bb056d4d70a1a4ae328ba801d247ec02 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-52.xml >@@ -0,0 +1,26 @@ >+<csstest def="NEGATED attribute space-separated value selector" module="W3C Selectors" modulename="css3-modsel" number="52" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub p { color : red } >+div.stub > a|*, div.stub > b|* { color : red ; display : block ; margin-bottom : 1em } >+div.stub *|*:not([test~="foo"]) { color : lime } >+div.stub *|p:not([class~="foo"]) { color : lime } >+div.stub b|*[test~="foo2"] { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q test="bar foo tut" xmlns="http://www.example.org/a"> >+ <r test="tut foofoo bar">This text should be</r> >+ <r>in green characters</r> >+</q> >+<s test="bar tut" xmlns="http://www.example.org/a">This text should be in green characters</s> >+<t xmlns="http://www.example.org/a">This text should be in green characters</t> >+<p class="tit foo1 tut">This text should be in green characters</p> >+<u test="tit foo2 tut" xmlns="http://www.example.org/b">This text should be in green characters</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-53.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-53.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fa5ea77a07b2b1f9e88b545bb78c8e9b49b6f4fa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-53.xml >@@ -0,0 +1,26 @@ >+<csstest def="NEGATED attribute dash-separated value selector" module="W3C Selectors" modulename="css3-modsel" number="53" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.stub p { color : red } >+div.stub > a|*, div.stub > b|* { color : red ; display : block ; margin-bottom : 1em } >+div.stub *|*:not([test|="foo-bar"]) { color : lime } >+div.stub *|p:not([lang|="en-us"]) { color : lime } >+div.stub b|*[test|="foo2-bar"] { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<q test="foo-bar" xmlns="http://www.example.org/a"> >+ <r test="foo-bartut">This text should be</r> >+ <r>in green characters</r> >+</q> >+<s test="bar tut" xmlns="http://www.example.org/a">This text should be in green characters</s> >+<t xmlns="http://www.example.org/a">This text should be in green characters</t> >+<p class="en-uk">This text should be in green characters</p> >+<u test="foo2-bar-lol" xmlns="http://www.example.org/b">This text should be in green characters</u> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-54.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-54.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..09fba60bf87bb2d53148074bd6f29c8e58c3bb0c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-54.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED substring matching attribute selector on beginning" module="W3C Selectors" modulename="css3-modsel" number="54" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub > * { color : red } >+div.stub *:not([title^="si on"]) { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should be in green characters.</p> >+<p title="on chante?">This paragraph should be in green characters.</p> >+<p title="si on chantait"> >+ <span title="si il chantait">This paragraph should be in green characters.</span> >+</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-55.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-55.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..947352d7784579a6927509287cf8417a2762be4e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-55.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED substring matching attribute selector on end" module="W3C Selectors" modulename="css3-modsel" number="55" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub > * { color : red } >+div.stub *:not([title$="tait"]) { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should be in green characters.</p> >+<p title="on chante?">This paragraph should be in green characters.</p> >+<p title="si on chantait"> >+ <span title="si il chante">This paragraph should be in green characters.</span> >+</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-56.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-56.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..34e3c8456729bd1869e7d37a2e0481ef332fedb0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-56.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED substring matching attribute selector on middle" module="W3C Selectors" modulename="css3-modsel" number="56" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub > * { color : red } >+div.stub *:not([title*=" on"]) { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should be in green characters.</p> >+<p title="on chante?">This paragraph should be in green characters.</p> >+<p title="si on chantait"> >+ <span title="si il chante">This paragraph should be in green characters.</span> >+</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..89b824672b3369bd40df17b3e3586d95dd45f24e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED Attribute existence selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="57" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+div.stub *:not([a|title]) {background-color : lime } >+</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <q a:title="a paragraph" xmlns="http://www.example.org/a">This a:q element should be unstyled.</q> >+ <p title="a paragraph">This paragraph should have a green background.</p> >+ <r b:title="a paragraph" xmlns="http://www.example.org/b">This b:r element should have a green background.</r> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9f0e3f38d348aa4ce7304245b7844fd57886c893 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57b.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED Attribute existence selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="57b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+div.stub *:not([a|title]) {background-color : red } >+</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <q a:title="a paragraph" xmlns="http://www.example.org/a">This a:q element should be unstyled.</q> >+ <p title="a paragraph">This paragraph should have a green background.</p> >+ <r b:title="a paragraph" xmlns="http://www.example.org/b">This b:r element should have a green background.</r> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-58.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-58.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..5e147c80a73fa7df51b4a5c8e7f607eda64510b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-58.xml-removed >@@ -0,0 +1,15 @@ >+<csstest def="Default attribute value and negation pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="58" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>form { background-color : red } >+form:not([method]) { background-color : lime } >+</cssrules> >+ >+<code> <!-- 'method' is an attribute with a default value in the XHTML DTD --> >+ <form action="http://www.example.org/foo.cgi" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>The paragraph should have a green background.</p> >+ </form> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-59.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-59.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b0aa032a2a915d5af66d719ab32df85f5d084c42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-59.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED class selector" module="W3C Selectors" modulename="css3-modsel" number="59" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub > * { color : red } >+div.stub *:not(.foo) { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should be in green characters.</p> >+<p class="bar foofoo tut">This paragraph should be in green characters.</p> >+<p class="bar foo tut"> >+ <span class="tut foo2">This paragraph should be in green characters.</span> >+</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-6.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-6.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9a386de0297aee8c2688bad7f34cc16529436ff1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-6.xml >@@ -0,0 +1,17 @@ >+<csstest def="Attribute value selector" module="W3C Selectors" modulename="css3-modsel" number="6" rev="1.1" date="18-november-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>address { background-color : red } >+address[title="foo"] { background-color : lime } >+span[title="a"] { background-color : red }</cssrules> >+ >+<code> >+<address title="foo" xmlns="http://www.w3.org/1999/xhtml"> >+<span title="b">This line should </span> >+ <span title="aa">have a green background. >+</span> >+</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-60.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-60.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..882156d32230069c1b9193ac508de56fe935607f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-60.xml >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED ID selector" module="W3C Selectors" modulename="css3-modsel" number="60" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub > * { color : red } >+div.stub *:not(#foo) { color : lime } >+</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should be in green characters.</p> >+<p id="foo2">This paragraph should be in green characters.</p> >+<p id="foo"> >+ <span>This paragraph should be in green characters.</span> >+</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-61.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-61.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..aee3da868ca811c55dfa979ef8c332448e11eb51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-61.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED :link pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="61" rev="1.1" date="01-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<historyneeded/> >+ >+<cssrules>div.stub > * { background-color : red } >+div.stub *:not(:link) { background-color : lime } >+</cssrules> >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<a href="http://www.w3.org/">This anchor should have a green background</a> >+(Note: You must have visited http://www.w3.org/ for this test to be valid.) >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-62.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-62.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..26e175951588b21ed03be40b14468827d9ec8e12 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-62.xml >@@ -0,0 +1,16 @@ >+<csstest def="NEGATED :visited pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="62" rev="1.1" date="01-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<historyneeded/> >+ >+<cssrules>div.stub > * { background-color : red } >+div.stub *:not(:visited) { background-color : lime } >+</cssrules> >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<a href="http://unvisited.example.org/css3-modsel-62/">This anchor should have a green background</a> >+(Don't follow this link.) >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-63.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-63.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..1215c119d662329999f480db100e9bc9f48c03ee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-63.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED :hover pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="63" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>div.stub * { color: lime; text-decoration: none; } >+div.stub > * > *:not(:hover) { color: black } >+</cssrules> >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p> <span>The color of this text should be green when the pointing device hovers over it.</span> </p> >+ <p> <a href="http://dummy.example.org/dummy">The color of this text should be green when the pointing device hovers over it.</a> </p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-64.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-64.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..87eb45bce9ee6a1d39e6fa171d14278e9c0c9bf7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-64.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED :active pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="64" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>div.stub * { color : lime } >+div.stub > * > *:not(:active) { color : black } >+</cssrules> >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p> <a href="http://dummy.example.org/dummy">This text should turn green while it is active.</a> </p> >+ <p> <button>This text should turn green while it is active.</button> </p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-65.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-65.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8fc8e954b360309cef7de1aad6d63c3440a93100 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-65.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :focus pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="65" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<userinteraction/> >+ >+<cssrules>a:not(:focus) { background-color: transparent; } >+a { background-color: lime; } >+</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">The background color of all <a href="#foo">anchors</a> >+ should become <a href="#foo"> green</a> when they have the >+ <a href="#foo">focus</a>.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7d17bf525dd6ad7eb0a2c23b0d49e3baa58b2c9b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66.xml >@@ -0,0 +1,23 @@ >+<csstest def="NEGATED :target pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="66" rev="1.2" date="30-august-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<userinteraction/> >+ >+<cssrules>p { background-color: navy; color: white; } >+p:not(:target) { background-color: white; color: black; }</cssrules> >+<code> >+<p id="first" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled. >+ The background of the following paragraph should become blue when >+ you follow <a href="#second">this link</a>.</p> >+<p id="second" xmlns="http://www.w3.org/1999/xhtml">This paragraph should initially be unstyled. >+ It should become blue when you select the link above. When you select >+ <a href="#third">this link</a>, it should return to being unstyled and the >+ background of the paragraph below should become blue.</p> >+<p id="third" xmlns="http://www.w3.org/1999/xhtml">This paragraph should initially be unstyled. >+ It should become blue when you select the link above. When you follow >+ <a href="#missing">this link</a>, the three paragraphs >+ should all return to being unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c3b4070773367dea07d795076f19a503e08a3870 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66b.xml >@@ -0,0 +1,11 @@ >+<csstest def="NEGATED :target pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="66b" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { background-color: red; } >+p:not(:target) { background-color: lime; }</cssrules> >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph should be green.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-67.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-67.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..533498fd9044e5b33e543d3906a9cb45e4bec2ea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-67.xml >@@ -0,0 +1,20 @@ >+<csstest def="NEGATED :lang() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="67" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>div.stub * { background-color : red } >+div.stub *:not(:lang(fr)) { background-color : green }</cssrules> >+ >+<code> >+<div lang="en" class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+<p>This paragraph should have a green background because the >+ enclosing div is in english.</p> >+<p lang="en">This paragraph should have a green background because >+ it is in english.</p> >+<div lang="fr"> >+ <p lang="en">This paragraph should have a green background >+ because it is in english.</p> >+</div> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-68.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-68.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..7c8afe60230237d7ca47b147d821b28a4443ec9f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-68.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED :enabled pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="68" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>button { background-color : red } >+input { background-color : red } >+button:not(:enabled) { background-color : lime } >+input:not(:enabled) { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+ <button disabled="disabled">A button (disabled) with green background</button> >+ <br/> >+ <input disabled="disabled" type="text" size="36" value="a text area (disabled) with green background"/> >+</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-69.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-69.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8915eb2839e36bb70cb97a493bc014edb3505502 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-69.xml >@@ -0,0 +1,17 @@ >+<csstest def="NEGATED :disabled pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="69" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>button { background-color : red } >+input { background-color : red } >+button:not(:disabled) { background-color : lime } >+input:not(:disabled) { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+ <button>A button (enabled) with green background</button> >+ <br/> >+ <input type="text" size="36" value="a text area (enabled) with green background"/> >+</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bd5199ddffaeeb43040d023c17dc1e1e10ad5caa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute multivalue selector" module="W3C Selectors" modulename="css3-modsel" number="7" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>p { background-color : red } >+p[class~="b"] { background-color : lime } >+address { background-color : red } >+address[title~="foo"] { background-color : lime } >+span[class~="b"] { background-color : red }</cssrules> >+ >+<code> >+<p class="a b c" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background because CLASS >+ contains "b"</p> >+<address title="tot foo bar" xmlns="http://www.w3.org/1999/xhtml"> >+<span class="a c">This address should also</span> >+ <span class="a bb c">have green background because the selector in the last >+ rule does not apply to the inner SPANs.</span> >+</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-70.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-70.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cce76420397231835a2111a2652184a5361aebe1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-70.xml >@@ -0,0 +1,12 @@ >+<csstest def="NEGATED :checked pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="70" rev="1.1" date="24-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>input, span { background-color : red } >+input:not(:checked), input:not(:checked) + span { background-color : lime}</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml"> >+<input type="checkbox"/> <span>Everything in this paragraph should have a green background</span></p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cdf956b89c7526e3b9e797dab15d84a9e3931ec5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72.xml >@@ -0,0 +1,14 @@ >+<csstest def="NEGATED :root pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="72" rev="1.1" date="27-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p:not(:root) { background-color: lime; } >+div * { background-color: red; } >+</cssrules> >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should have a green background and there should be no red anywhere.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0d1f0d1a515dbc73dd1c3036888b0ed21964662d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72b.xml >@@ -0,0 +1,14 @@ >+<csstest def="NEGATED :root pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="72b" rev="1.0" date="27-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>html:not(:root), test:not(:root) { background-color: red; } >+p { background-color: lime; } >+</cssrules> >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This paragraph should have a green background and there should be no red anywhere.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..54dafec9b36e394043fa6816d951a9737a8f4c92 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73.xml >@@ -0,0 +1,96 @@ >+<csstest def="NEGATED :nth-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="73" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+ul > li:not(:nth-child(odd)) { background-color : lime } >+ol > li:not(:nth-child(even)) { background-color : lime } >+table.t1 tr:not(:nth-child(-n+4)) { background-color : lime } >+table.t2 td:not(:nth-child(3n+1)) { background-color : lime } >+table.t1 td, table.t2 td { border : thin black solid }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="red">This second list item should have a green background</li> >+ <li>Third list</li> >+ <li class="red">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="red">This sixth list item should have a green background</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="red">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="red">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="red">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr> >+<td>1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr> >+<td>4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 5.1</td> >+<td>5.2</td> >+<td>5.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 6.1</td> >+<td>6.2</td> >+<td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td>1.1</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>1.4</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>1.7</td> >+<td class="red">green cell</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>2.4</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>2.7</td> >+<td class="red">green cell</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>3.4</td> >+<td class="red">green cell</td> >+<td class="red">green cell</td> >+ <td>3.7</td> >+<td class="red">green cell</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b5657a1189b42cf823d3bc9d1c09b2a9e927c8f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73b.xml >@@ -0,0 +1,97 @@ >+<csstest def="NEGATED :nth-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="73b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important; } >+ul > li:not(:nth-child(odd)) { background-color : red } >+ol > li:not(:nth-child(even)) { background-color : red } >+table.t1 tr:not(:nth-child(-n+4)) { background-color : red } >+table.t2 td:not(:nth-child(3n+1)) { background-color : red } >+table.t1 td, table.t2 td { border : thin black solid }</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="green">This second list item should have a green background</li> >+ <li>Third list</li> >+ <li class="green">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="green">This sixth list item should have a green background</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="green">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="green">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="green">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr> >+<td>1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr> >+<td>4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 5.1</td> >+<td>5.2</td> >+<td>5.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 6.1</td> >+<td>6.2</td> >+<td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td>1.1</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>1.4</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>1.7</td> >+<td class="green">green cell</td> >+</tr> >+ <tr> >+<td>2.1</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>2.4</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>2.7</td> >+<td class="green">green cell</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>3.4</td> >+<td class="green">green cell</td> >+<td class="green">green cell</td> >+ <td>3.7</td> >+<td class="green">green cell</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cb3efc99cd86c617e749e2ef3a87227ff23c0be7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74.xml >@@ -0,0 +1,97 @@ >+<csstest def="NEGATED :nth-last-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="74" rev="1.0" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+ul > li:not(:nth-last-child(odd)) { background-color : lime } >+ol > li:not(:nth-last-child(even)) { background-color : lime } >+table.t1 tr:not(:nth-last-child(-n+4)) { background-color : lime } >+table.t2 td:not(:nth-last-child(3n+1)) { background-color : lime } >+table.t1 td, table.t2 td { border : thin black solid } >+</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="red">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="red">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="red">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="red">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="red">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="red">This sixth list item should have a green background</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr class="red"> >+<td>Green row : 1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr class="red"> >+<td>Green row : 2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr> >+<td>4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr> >+<td>5.1</td> >+<td>5.2</td> >+ <td>5.3</td> >+</tr> >+ <tr> >+<td>6.1</td> >+<td>6.2</td> >+ <td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td class="red">green cell</td> >+<td>1.2</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>1.5</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>1.8</td> >+</tr> >+ <tr> >+<td class="red">green cell</td> >+<td>2.2</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>2.5</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>2.8</td> >+</tr> >+ <tr> >+<td class="red">green cell</td> >+<td>3.2</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>3.5</td> >+<td class="red">green cell</td> >+ <td class="red">green cell</td> >+<td>3.8</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ed7f208684686b8df954ac3af90c6c4cfa67a049 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74b.xml >@@ -0,0 +1,99 @@ >+<csstest def="NEGATED :nth-last-child() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="74b" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime ! important; } >+ul > li:not(:nth-last-child(odd)) { background-color : red } >+ol > li:not(:nth-last-child(even)) { background-color : red } >+table.t1 tr:not(:nth-last-child(-n+4)) { background-color : red } >+table.t2 td:not(:nth-last-child(3n+1)) { background-color : red } >+table.t1 td, table.t2 td { border : thin black solid } >+</cssrules> >+ >+<code> >+<ul xmlns="http://www.w3.org/1999/xhtml"> >+ <li class="green">This first list item should have a green background</li> >+ <li>Second list item</li> >+ <li class="green">This third list item should have a green background</li> >+ <li>Fourth list item</li> >+ <li class="green">This fifth list item should have a green background</li> >+ <li>Sixth list item</li> >+</ul> >+<ol xmlns="http://www.w3.org/1999/xhtml"> >+ <li>First list item</li> >+ <li class="green">This second list item should have a green background</li> >+ <li>Third list item</li> >+ <li class="green">This fourth list item should have a green background</li> >+ <li>Fifth list item</li> >+ <li class="green">This sixth list item should have a green background</li> >+</ol> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<table border="1" class="t1"> >+ <tr class="green"> >+<td>Green row : 1.1</td> >+<td>1.2</td> >+ <td>1.3</td> >+</tr> >+ <tr class="green"> >+<td>Green row : 2.1</td> >+<td>2.2</td> >+ <td>2.3</td> >+</tr> >+ <tr> >+<td>3.1</td> >+<td>3.2</td> >+ <td>3.3</td> >+</tr> >+ <tr> >+<td>4.1</td> >+<td>4.2</td> >+ <td>4.3</td> >+</tr> >+ <tr> >+<td>5.1</td> >+<td>5.2</td> >+ <td>5.3</td> >+</tr> >+ <tr> >+<td>6.1</td> >+<td>6.2</td> >+ <td>6.3</td> >+</tr> >+</table> >+<p/> >+<table class="t2" border="1"> >+ <tr> >+<td class="green">green cell</td> >+<td>1.2</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>1.5</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>1.8</td> >+</tr> >+ <tr> >+<td class="green">green cell</td> >+<td>2.2</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>2.5</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>2.8</td> >+</tr> >+ <tr> >+<td class="green">green cell</td> >+<td>3.2</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>3.5</td> >+<td class="green">green cell</td> >+ <td class="green">green cell</td> >+<td>3.8</td> >+</tr> >+</table> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..996af7b18f719db9193725c1aa6166cca12264aa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75.xml >@@ -0,0 +1,31 @@ >+<csstest def="NEGATED :nth-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="75" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.red { background-color : red } >+p:not(:nth-of-type(3)) { background-color : lime } >+dl > *:not(:nth-of-type(3n+1)) { background-color : lime } >+</cssrules> >+ >+<code> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background</p> >+<address xmlns="http://www.w3.org/1999/xhtml">And this address should be unstyled.</address> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should also have green background!</p> >+<p xmlns="http://www.w3.org/1999/xhtml">But this one should be unstyled again.</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt>First definition term</dt> >+ <dd>First definition</dd> >+ <dt class="red">Second definition term that should have green background</dt> >+ <dd class="red">Second definition that should have green background</dd> >+ <dt class="red">Third definition term that should have green background</dt> >+ <dd class="red">Third definition that should have green background</dd> >+ <dt>Fourth definition term</dt> >+ <dd>Fourth definition</dd> >+ <dt class="red">Fifth definition term that should have green background</dt> >+ <dd class="red">Fifth definition that should have green background</dd> >+ <dt class="red">Sixth definition term that should have green background</dt> >+ <dd class="red">Sixth definition that should have green background</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..fae417ee01377f919ba0b2bb0b6eab45b8b7642f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75b.xml >@@ -0,0 +1,31 @@ >+<csstest def="NEGATED :nth-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="75b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important } >+p:not(:nth-of-type(3)) { background-color : red } >+dl > *:not(:nth-of-type(3n+1)) { background-color : red } >+</cssrules> >+ >+<code> >+<p class="green" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background</p> >+<address xmlns="http://www.w3.org/1999/xhtml">And this address should be unstyled.</address> >+<p class="green" xmlns="http://www.w3.org/1999/xhtml">This paragraph should also have green background!</p> >+<p xmlns="http://www.w3.org/1999/xhtml">But this one should be unstyled again.</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt>First definition term</dt> >+ <dd>First definition</dd> >+ <dt class="green">Second definition term that should have green background</dt> >+ <dd class="green">Second definition that should have green background</dd> >+ <dt class="green">Third definition term that should have green background</dt> >+ <dd class="green">Third definition that should have green background</dd> >+ <dt>Fourth definition term</dt> >+ <dd>Fourth definition</dd> >+ <dt class="green">Fifth definition term that should have green background</dt> >+ <dd class="green">Fifth definition that should have green background</dd> >+ <dt class="green">Sixth definition term that should have green background</dt> >+ <dd class="green">Sixth definition that should have green background</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4c1caa7abe2cf183151ffa5fa3aa4b5500d3e4f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76.xml >@@ -0,0 +1,32 @@ >+<csstest def="NEGATED :nth-last-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="76" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.red { background-color : red } >+p:not(:nth-last-of-type(3)) { background-color : lime } >+dl > *:not(:nth-last-of-type(3n+1)) { background-color : lime } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+<address xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background.</p> >+<p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background.</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt class="red">First definition term that should have green background.</dt> >+ <dd class="red">First definition that should also have a green background.</dd> >+ <dt class="red">Second definition term that should have green background.</dt> >+ <dd class="red">Second definition that should have green background.</dd> >+ <dt>Third definition term.</dt> >+ <dd>Third definition.</dd> >+ <dt class="red">Fourth definition term that should have green background.</dt> >+ <dd class="red">Fourth definition that should have green background.</dd> >+ <dt class="red">Fifth definition term that should have green background.</dt> >+ <dd class="red">Fifth definition that should have green background.</dd> >+ <dt>Sixth definition term.</dt> >+ <dd>Sixth definition.</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..089f673ecf4a4e79cff2073c5de210ee5bda0752 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76b.xml >@@ -0,0 +1,32 @@ >+<csstest def="NEGATED :nth-last-of-type() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="76b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime ! important } >+p:not(:nth-last-of-type(3)) { background-color : red } >+dl > *:not(:nth-last-of-type(3n+1)) { background-color : red } >+</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+<address xmlns="http://www.w3.org/1999/xhtml">This address should be unstyled.</address> >+<p class="green" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background.</p> >+<p class="green" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background.</p> >+<dl xmlns="http://www.w3.org/1999/xhtml"> >+ <dt class="green">First definition term that should have green background.</dt> >+ <dd class="green">First definition that should also have a green background.</dd> >+ <dt class="green">Second definition term that should have green background.</dt> >+ <dd class="green">Second definition that should have green background.</dd> >+ <dt>Third definition term.</dt> >+ <dd>Third definition.</dd> >+ <dt class="green">Fourth definition term that should have green background.</dt> >+ <dd class="green">Fourth definition that should have green background.</dd> >+ <dt class="green">Fifth definition term that should have green background.</dt> >+ <dd class="green">Fifth definition that should have green background.</dd> >+ <dt>Sixth definition term.</dt> >+ <dd>Sixth definition.</dd> >+</dl> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e204565968d130953eea208bbb50c5e54d5296be >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77.xml >@@ -0,0 +1,33 @@ >+<csstest def="NEGATED :first-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="77" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.red { background-color : red } >+.t1 td:not(:first-child) { background-color : lime } >+p > *:not(:first-child) { background-color : lime } >+table.t1 td { border : thin black solid } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <table class="t1" border="1"> >+ <tr> >+ <td>1.1</td> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ </tr> >+ <tr> >+ <td>2.1</td> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ </tr> >+ <tr> >+ <td>3.1</td> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ </tr> >+ </table> >+ </div> >+ <p xmlns="http://www.w3.org/1999/xhtml">This paragraph <span>should be</span> unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..77a6f9b7efd68e9bb1901d290214e0ba2545bd62 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77b.xml >@@ -0,0 +1,33 @@ >+<csstest def="NEGATED :first-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="77b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important } >+.t1 td:not(:first-child) { background-color : red } >+p > *:not(:first-child) { background-color : red } >+table.t1 td { border : thin black solid } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <table class="t1" border="1"> >+ <tr> >+ <td>1.1</td> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ </tr> >+ <tr> >+ <td>2.1</td> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ </tr> >+ <tr> >+ <td>3.1</td> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ </tr> >+ </table> >+ </div> >+ <p xmlns="http://www.w3.org/1999/xhtml">This paragraph <span>should be</span> unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..42dd9ccaf3dce5a238d11aa4a397dbf6c153a953 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78.xml >@@ -0,0 +1,33 @@ >+<csstest def="NEGATED :last-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="78" rev="1.1" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.red { background-color : red } >+.t1 td:not(:last-child) { background-color : lime } >+p > *:not(:last-child) { background-color : lime } >+table.t1 td { border : thin black solid } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <table class="t1" border="1"> >+ <tr> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ <td>1.3</td> >+ </tr> >+ <tr> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ <td>2.3</td> >+ </tr> >+ <tr> >+ <td class="red">green cell</td> >+ <td class="red">green cell</td> >+ <td>3.3</td> >+ </tr> >+ </table> >+ </div> >+ <p xmlns="http://www.w3.org/1999/xhtml">This <span>paragraph should</span> be unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..491dcaa7e99a1fb7090c418a9369ed9c08b13c96 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78b.xml >@@ -0,0 +1,33 @@ >+<csstest def="NEGATED :last-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="78b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important } >+.t1 td:not(:last-child) { background-color : red } >+p > *:not(:last-child) { background-color : red } >+table.t1 td { border : thin black solid } >+</cssrules> >+ >+<code> >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ <table class="t1" border="1"> >+ <tr> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ <td>1.3</td> >+ </tr> >+ <tr> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ <td>2.3</td> >+ </tr> >+ <tr> >+ <td class="green">green cell</td> >+ <td class="green">green cell</td> >+ <td>3.3</td> >+ </tr> >+ </table> >+ </div> >+ <p xmlns="http://www.w3.org/1999/xhtml">This <span>paragraph should</span> be unstyled.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-79.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-79.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..e0f664373a22e65a6f3d123cca473f76dcf98b12 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-79.xml >@@ -0,0 +1,16 @@ >+<csstest def="NEGATED :first-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="79" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+address { margin-bottom : 1em ; margin-left : 1em } >+address:not(:first-of-type) { background-color : lime } >+</cssrules> >+ >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml">This div contains 3 addresses : >+<address>A first address with normal background</address> >+<address class="red">A second address that should have a green background</address> >+<address class="red">A third address that should have a green background</address> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..51fcccb0ada583ce9f264787ffa005dc0d7a75ac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7b.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute multivalue selector" module="W3C Selectors" modulename="css3-modsel" number="7b" rev="1.0" date="1-january-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: lime; } >+[title~="hello world"] { background: red; } >+/* Section 6.3.1: Represents the att attribute whose value is a >+space-separated list of words, one of which is exactly "val". If this >+selector is used, the words in the value must not contain spaces >+(since they are separated by spaces). */ >+</cssrules> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="hello world">This line should have a green background.</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system >new file mode 100644 >index 0000000000000000000000000000000000000000..68c5a9fe804445e6834ce14052723869d49d6814 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system >@@ -0,0 +1,29 @@ >+<csstest def="Attribute multivalue selector and spaces (title attribute)" module="W3C Selectors" modulename="css3-modsel" number="7c" rev="1.0" date="9-november-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: red; } >+[title~="pass"] { background: lime; } >+address { background: lime; } >+[title~="fail"] { background: red; } >+</cssrules> >+ >+<!-- XML 1.0 doesn't support the characters on the lines commented out below --> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="test	pass">This line should have a green background.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="test
pass">This line should have a green background.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="test
pass">This line should have a green background.</p> >+ <!-- <p xmlns="http://www.w3.org/1999/xhtml" title="testpass">This line should have a green background.</p> --> >+ <p xmlns="http://www.w3.org/1999/xhtml" title="test pass">This line should have a green background.</p> >+ <!-- <address xmlns="http://www.w3.org/1999/xhtml" title="testpass">This line should have a green background.</address> --> >+ <!-- <address xmlns="http://www.w3.org/1999/xhtml" title="testpass">This line should have a green background.</address> --> >+ <address xmlns="http://www.w3.org/1999/xhtml" title="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" title="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" title="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" title="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" title="test𐀠pass">This line should have a green background.</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system >new file mode 100644 >index 0000000000000000000000000000000000000000..61faff542740738ede1d480d5d6a986af7e72775 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system >@@ -0,0 +1,30 @@ >+<?xml version="1.1"?> >+<csstest def="Attribute multivalue selector and spaces (class attribute)" module="W3C Selectors" modulename="css3-modsel" number="7d" rev="1.0" date="9-november-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<cssrules> >+p { background: red; } >+[class~="pass"] { background: lime; } >+address { background: lime; } >+[class~="fail"] { background: red; } >+</cssrules> >+ >+<!-- XML 1.0 doesn't support the characters on the lines commented out below --> >+ >+<code> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="test	pass">This line should have a green background.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="test
pass">This line should have a green background.</p> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="test
pass">This line should have a green background.</p> >+ <!-- <p xmlns="http://www.w3.org/1999/xhtml" class="testpass">This line should have a green background.</p> --> >+ <p xmlns="http://www.w3.org/1999/xhtml" class="test pass">This line should have a green background.</p> >+ <!-- <address xmlns="http://www.w3.org/1999/xhtml" class="testpass">This line should have a green background.</address> --> >+ <!-- <address xmlns="http://www.w3.org/1999/xhtml" class="testpass">This line should have a green background.</address> --> >+ <address xmlns="http://www.w3.org/1999/xhtml" class="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" class="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" class="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" class="test pass">This line should have a green background.</address> >+ <address xmlns="http://www.w3.org/1999/xhtml" class="test𐀠pass">This line should have a green background.</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-8.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-8.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8ad15c3ed3f1676bab51ff027ed6b33c49bb61bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-8.xml >@@ -0,0 +1,19 @@ >+<csstest def="Attribute value selectors (hyphen-separated attributes)" module="W3C Selectors" modulename="css3-modsel" number="8" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>p { background-color : red } >+p[lang|="en"] { background-color : lime } >+address { background-color : red } >+address[lang="fi"] { background-color : lime } >+span[lang|="fr"] { background-color : red }</cssrules> >+ >+<code> >+<p lang="en-gb" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have green background because its language is "en-gb"</p> >+<address lang="fi" xmlns="http://www.w3.org/1999/xhtml"> >+<span lang="en-us">This address should also</span> >+ <span lang="en-fr">have green background because the language of the inner SPANs >+ is not French.</span> >+</address> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-80.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-80.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9199f4b5bd0f899e88bef788f5397050bac8c540 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-80.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :last-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="80" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>.red { background-color : red } >+address { margin-bottom : 1em ; margin-left : 1em } >+address:not(:last-of-type) { background-color : lime } >+</cssrules> >+<code> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<address class="red">A first address that should have a green background</address> >+<address class="red">A second address that should have a green background</address> >+<address>A third address with normal background</address> >+This div should have three addresses above it.</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..2e16fdb3b900f7ddb1988abab15e4b6e294af10f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :only-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="81" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.red { background-color : red } >+p:not(:only-child) { background-color : lime } >+div.testText > div > p { margin-left : 1em } >+</cssrules> >+<code> >+ <p class="red" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+ <div xmlns="http://www.w3.org/1999/xhtml">This div contains only one paragraph. >+ <p>This paragraph should be unstyled.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3d70619eb954b2d5a7d6fe5b62d1a1dac6b107e0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81b.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :only-child pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="81b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important } >+p:not(:only-child) { background-color : lime } >+div.testText > div > p { margin-left : 1em } >+</cssrules> >+<code> >+ <p class="green" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+ <div xmlns="http://www.w3.org/1999/xhtml">This div contains only one paragraph. >+ <p>This paragraph should be unstyled.</p> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..180aa135583a1fcc0e808874fd6b36d3668dadb8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :only-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="82" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.red { background-color : red } >+.t1 *:not(:only-of-type) { background-color : lime } >+</cssrules> >+<code> >+<div class="t1" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="red">This paragraph should have green background.</p> >+<address>But this address should be unstyled.</address> >+<p class="red">This paragraph should have green background.</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..388a7e0dbd526740efbfb6691c3ba4e4fc265e87 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82b.xml >@@ -0,0 +1,15 @@ >+<csstest def="NEGATED :only-of-type pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="82b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+<cssrules>.green { background-color : lime ! important } >+.t1 *:not(:only-of-type) { background-color : red } >+</cssrules> >+<code> >+<div class="t1" xmlns="http://www.w3.org/1999/xhtml"> >+<p class="green">This paragraph should have green background.</p> >+<address>But this address should be unstyled.</address> >+<p class="green">This paragraph should have green background.</p> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-83.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-83.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..07f6c1211b72fc125fedcf5095c3466b3a139d0a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-83.xml >@@ -0,0 +1,11 @@ >+<csstest def="Negation pseudo-class cannot be an argument of itself" module="W3C Selectors" modulename="css3-modsel" number="83" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p { background-color : lime } >+p:not(:not(p)) { background-color : red }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..9a19e01f486cf0136ea44f21173275ffd1693fd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed >@@ -0,0 +1,17 @@ >+<csstest def=":contains() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="84" rev="1.2" date="29-september-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>div.stub *:contains("agree") { background-color : lime } >+.red { background-color : red }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="red">There is no disagreement over the fact that this paragraph should have a green background.</p> >+ <ul class="red"> >+ <li>All the text in this list should have a</li><li>green background throughout as well.</li> >+ </ul> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..fbb0f06a69828fd85ed8a79224320c3e43d57718 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed >@@ -0,0 +1,18 @@ >+<csstest def=":contains() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="84b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>.green { background-color : lime } >+div.stub *:contains("agree") { background-color : red }</cssrules> >+ >+<code> >+ <div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="green">This paragraph should have a green background.</p> >+ <ul class="green"> >+ <li>This list should also have a</li> >+<li>green background throughout.</li> >+ </ul> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..2021bd8fba63cb5a885deeda32d803222ce07154 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed >@@ -0,0 +1,18 @@ >+<csstest def="NEGATED :contains() pseudo-class" module="W3C Selectors" modulename="css3-modsel" number="85" rev="1.2" date="29-september-2005" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>div.stub *:not(:contains("red")) { background-color: lime; } >+.red { background-color: red; }</cssrules> >+ >+<code> >+<div class="stub" xmlns="http://www.w3.org/1999/xhtml"> >+ <p class="red">This paragraph should have a green background.</p> >+ <ul class="red"> >+ <li>All the text in this list should have a</li> >+ <li>green background throughout as well.</li> >+ </ul> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-86.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-86.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cb55d9fca491f8d791a8f698b7d29ab1d3831b85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-86.xml >@@ -0,0 +1,17 @@ >+<csstest def="Nondeterministic matching of descendant and child combinators" module="W3C Selectors" modulename="css3-modsel" number="86" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p { color: red; } >+blockquote > div p { color: green; } >+</cssrules> >+<t:code xmlns:t="http://www.example.org/css3tests" xmlns="http://www.w3.org/1999/xhtml"> >+<blockquote> >+<div> >+<div> >+<p>This text should be green.</p> >+</div> >+</div> >+</blockquote> >+</t:code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..377fbb601c49a1a9ca0cb70a4ee5411412aefa8a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87.xml >@@ -0,0 +1,14 @@ >+<csstest def="Nondeterministic matching of direct and indirect adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="87" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: red; } >+blockquote + div ~ p { color: green; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0e0861f17e14e6d6ce77379194e0e418573e5c25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87b.xml >@@ -0,0 +1,14 @@ >+<csstest def="Nondeterministic matching of direct and indirect adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="87b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: green ! important; } >+blockquote + div ~ p { color: red; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f9795eabf91d5ac8ed9f0a3422c4a2bd10fd230d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88.xml >@@ -0,0 +1,16 @@ >+<csstest def="Nondeterministic matching of descendant and direct adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="88" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: red; } >+blockquote + div p { color: green; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<div> >+<p>This text should be green.</p> >+</div> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..97a8a654d9382ebe98f32da18a5a5f10dfd55266 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88b.xml >@@ -0,0 +1,16 @@ >+<csstest def="Nondeterministic matching of descendant and direct adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="88b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: green ! important; } >+blockquote + div p { color: red; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml"> >+<div> >+<p>This text should be green.</p> >+</div> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-89.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-89.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..48aca00df9ef61d7c3ab233bf658225208a3cc40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-89.xml >@@ -0,0 +1,16 @@ >+<csstest def="Simple combination of descendant and child combinators" module="W3C Selectors" modulename="css3-modsel" number="89" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>p { color: red; } >+blockquote div > p { color: green; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"> >+<div> >+<div> >+<p>This text should be green.</p> >+</div> >+</div> >+</blockquote> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-9.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-9.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..17c5faa589ec21365d9bfb0b61d66d5126a9665c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-9.xml >@@ -0,0 +1,12 @@ >+<csstest def="Substring matching attribute selector (beginning)" module="W3C Selectors" modulename="css3-modsel" number="9" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<cssrules>p { background-color : red } >+p[title^="foo"] { background-color : lime }</cssrules> >+ >+<code> >+<p title="foobar" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background<br/> >+because its title attribute begins with "foo"</p> >+</code> >+ >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3269a9c9397fac6819f2703572417653e73ff091 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90.xml >@@ -0,0 +1,14 @@ >+<csstest def="Simple combination of direct and indirect adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="90" rev="1.3" date="29-may-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: red; } >+blockquote ~ div + p { color: green; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..cc6303e0e5b514eb848c51533808bf7f849c6849 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90b.xml >@@ -0,0 +1,14 @@ >+<csstest def="Simple combination of direct and indirect adjacent combinators" module="W3C Selectors" modulename="css3-modsel" number="90b" rev="1.2" date="3-march-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>p { color: green ! important; } >+blockquote ~ div + p { color: red; }</cssrules> >+<code> >+<blockquote xmlns="http://www.w3.org/1999/xhtml"><div>This text should be unstyled.</div></blockquote> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<div xmlns="http://www.w3.org/1999/xhtml">This text should be unstyled.</div> >+<p xmlns="http://www.w3.org/1999/xhtml">This text should be green.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-91.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-91.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..64db9e8fd074b41b1fc592d26839828e918f631a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-91.xml >@@ -0,0 +1,11 @@ >+<csstest def="Type element selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="91" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace test url(http://www.example.org/a); >+testa { background-color : red } >+test|testa { background-color : lime }</cssrules> >+<code> >+<testa xmlns="http://www.example.org/a">This paragraph should have a green background</testa> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-92.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-92.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f7ab938633031a71b5b16dd21828618d0d2492a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-92.xml >@@ -0,0 +1,13 @@ >+<csstest def="Type element selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="92" rev="1.0" date="11-july-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+<author>Daniel Glazman</author> >+ >+<cssrules>@namespace test url(http://www.example.org/b); >+div.myTest * { background-color : red } >+div.myTest *|testA { background-color : lime }</cssrules> >+ >+<code> >+<div class="myTest" xmlns="http://www.w3.org/1999/xhtml"> >+<testA xmlns="http://www.example.org/b">This paragraph should have a green background</testa> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-93.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-93.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..646ba7a6a5ea1a4ea3d109c71e8a9f74c06ebe17 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-93.xml >@@ -0,0 +1,13 @@ >+<csstest def="Type element selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="93" rev="1.1" date="13-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace test url(http://www.example.org/b); >+*|testA { background-color : red } >+|testA {background-color : lime }</cssrules> >+ >+<code> >+<testA xmlns="">This paragraph has no declared namespace and should have a green background.</testa> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3182eedd5b963d245582a62c4769ceddb78fc704 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94.xml >@@ -0,0 +1,18 @@ >+<csstest def="Universal selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="94" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+p, q { display : block ; margin-bottom : 1em } >+b|* { background-color : lime }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This line should be unstyled.</p> >+<p xmlns="http://www.example.org/b">This line should have a green background.</p> >+<q xmlns="http://www.example.org/b">This line should have a green background.</q> >+<p xmlns="http://www.example.org/a">This line should be unstyleed.</p> >+<p xmlns="http://www.example.org/b">This line should have a green background.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..683af54fd62e3586f5e401b38cff2609b688eb0b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Universal selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="94b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+p, q { display : block ; margin-bottom : 1em } >+b|* { background-color : red } >+[test] { background-color: lime; }</cssrules> >+ >+<code> >+<p xmlns="http://www.w3.org/1999/xhtml">This line should be unstyled.</p> >+<p xmlns="http://www.example.org/b" test="test">This line should have a green background.</p> >+<q xmlns="http://www.example.org/b" test="test">This line should have a green background.</q> >+<p xmlns="http://www.example.org/a">This line should be unstyled.</p> >+<p xmlns="http://www.example.org/b" test="test">This line should have a green background.</p> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-95.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-95.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..c501fecd1106bb232f247633acf79908736b5dac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-95.xml >@@ -0,0 +1,20 @@ >+<csstest def="Universal selector with universal namespace" module="W3C Selectors" modulename="css3-modsel" number="95" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.test * { background-color : red ; display : block ; margin-bottom : 1em } >+div.test *|* { background-color : lime }</cssrules> >+ >+<code> >+ <div class="test" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This line should have a green background</p> >+ <p xmlns="http://www.example.org/b">This line should have a green background</p> >+ <q xmlns="http://www.example.org/b">This line should have a green background</q> >+ <p xmlns="http://www.example.org/a">This line should have a green background</p> >+ <foo xmlns="http://www.example.org/b">This line should have a green background</foo> >+ </div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..926395e791bcb062edcf68817a1f130d9ad90c0a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96.xml >@@ -0,0 +1,24 @@ >+<csstest def="Universal selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="96" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.green * { background-color : red } >+div.test * { display : block ; margin-bottom : 1em } >+div.test |* { background-color : lime }</cssrules> >+ >+<code> >+<div class="test" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This line should be unstyled.</p> >+ <elementA xmlns="http://www.example.org/a">This line should be unstyled.</elementa> >+ <elementB xmlns="http://www.example.org/b">This line should be unstyled.</elementb> >+ <div class="green"> >+ <p xmlns="">This line should have a green background</p> >+ <elementA xmlns="">This line should have a green background</elementa> >+ <elementB xmlns="">This line should have a green background</elementb> >+ </div> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..9aac5081e081f3608edb3a624d5f85da5d7180cd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96b.xml >@@ -0,0 +1,24 @@ >+<csstest def="Universal selector without declared namespace" module="W3C Selectors" modulename="css3-modsel" number="96b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+div.green * { background-color : lime ! important } >+div.test * { display : block ; margin-bottom : 1em } >+div.test |* { background-color : red }</cssrules> >+ >+<code> >+<div class="test" xmlns="http://www.w3.org/1999/xhtml"> >+ <p>This line should be unstyled.</p> >+ <elementA xmlns="http://www.example.org/a">This line should be unstyled.</elementa> >+ <elementB xmlns="http://www.example.org/b">This line should be unstyled.</elementb> >+ <div class="green"> >+ <p xmlns="">This line should have a green background</p> >+ <elementA xmlns="">This line should have a green background</elementa> >+ <elementB xmlns="">This line should have a green background</elementb> >+ </div> >+</div> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..bcfddc6ff3484a9ed883b17df36eb12a40fdb110 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute existence selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="97" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r { display : block ; margin-bottom : 1em } >+*|q { background-color : red } >+*[a|title] {background-color : lime } >+</cssrules> >+ >+<code> >+ <p title="a paragraph" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+ <q a:title="a paragraph" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+ <r b:title="a paragraph" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..684b97e470c99f3ce41dec2dd4cadf0308edded2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97b.xml >@@ -0,0 +1,18 @@ >+<csstest def="Attribute existence selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="97b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r { display : block ; margin-bottom : 1em } >+*|q { background-color : lime ! important } >+*[a|title] {background-color : red } >+</cssrules> >+ >+<code> >+ <p title="a paragraph" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+ <q a:title="a paragraph" xmlns="http://www.example.org/a">This paragraph should have a green background.</q> >+ <r b:title="a paragraph" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f8a7ea055f51e73ed01c49509a972e7ec0d86d70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="98" rev="1.2" date="7-february-2004" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q, *|t { background-color : red } >+*[a|title="foo"] {background-color : lime } >+*[a|title=footwo] {background-color : lime } >+</cssrules> >+ >+<code> >+ <p title="foo" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+ <q a:title="foo" xmlns="http://www.example.org/a">This paragraph should have a green background</q> >+ <s a:title="foobar" xmlns="http://www.example.org/a">This paragraph should be unstyled.</s> >+ <r b:title="foo" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+ <t a:title="footwo" xmlns="http://www.example.org/a">This paragraph should have a green background</t> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..b9ac686f2d25b9abff18d51cdb4b2e8110277628 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98b.xml >@@ -0,0 +1,19 @@ >+<csstest def="Attribute value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="98b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|q { background-color : lime ! important } >+*[a|title="foo"] {background-color : red } >+</cssrules> >+ >+<code> >+ <p title="foo" xmlns="http://www.w3.org/1999/xhtml">This paragraph should be unstyled.</p> >+ <q a:title="foo" xmlns="http://www.example.org/a">This paragraph should have a green background</q> >+ <s a:title="foobar" xmlns="http://www.example.org/a">This paragraph should be unstyled.</s> >+ <r b:title="foo" xmlns="http://www.example.org/b">This paragraph should be unstyled.</r> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..f5e88ecb5438fefce58c4efbbd909b15784faa32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99.xml >@@ -0,0 +1,21 @@ >+<csstest def="Attribute space-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="99" rev="1.2" date="22-june-2003" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : red } >+*|*[a|foo~="bar"], *|*[|class~="bar"] { background-color : lime } >+*|*[html|class~="bar"] { background-color : red } >+</cssrules> >+ >+<code> >+ <p class="t bar u" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+ <q a:foo="hgt bardot f" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+ <r a:foo="hgt bar f" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+ <s b:foo="hgt bar f" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..30fb0021bc13761bd974d4ac3360d6719d970d4f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99b.xml >@@ -0,0 +1,20 @@ >+<csstest def="Attribute space-separated value selector with declared namespace" module="W3C Selectors" modulename="css3-modsel" number="99b" rev="1.1" date="12-november-2001" xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.example.org/css3tests"> >+ >+<author>Daniel Glazman</author> >+<author>Ian Hickson</author> >+ >+<cssrules>@namespace a url(http://www.example.org/a); >+@namespace b url(http://www.example.org/b); >+@namespace html url(http://www.w3.org/1999/xhtml); >+*|p, *|q, *|r, *|s { display : block ; margin-bottom : 1em } >+*|p, *|r { background-color : lime ! important } >+*|*[a|foo~="bar"], *|*[html|class~="bar"] { background-color : red } >+</cssrules> >+ >+<code> >+ <p class="t bar u" xmlns="http://www.w3.org/1999/xhtml">This paragraph should have a green background.</p> >+ <q a:foo="hgt bardot f" xmlns="http://www.example.org/a">This paragraph should be unstyled.</q> >+ <r a:foo="hgt bar f" xmlns="http://www.example.org/a">This paragraph should have a green background.</r> >+ <s b:foo="hgt bar f" xmlns="http://www.example.org/b">This paragraph should be unstyled.</s> >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..06b98529876db7d19e830866afc9a0840240eae8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1.xml >@@ -0,0 +1,34 @@ >+<csstest def="NEGATED Dynamic handling of :empty" module="W3C Selectors" modulename="css3-modsel" number="d1" rev="1.1" date="3-march-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ #test { background: red; display: block; padding: 1em; } >+ #test:not(:empty) { background: lime; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ document.getElementById('test').appendChild(document.createTextNode('This line should be green.')); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> The following bar should be green. </p> >+ >+ <div id="test"/> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1b.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1b.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..caf7ae8a8aded385820ca1427014a218b3f9284b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1b.xml >@@ -0,0 +1,38 @@ >+<csstest def="Dynamic handling of :empty" module="W3C Selectors" modulename="css3-modsel" number="d1b" rev="1.1" date="3-march-2006" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ #test1 { background: red; display: block; padding: 1em; margin: 1em; } >+ #test1:empty { background: lime; } >+ #test2 { background: lime; display: block; padding: 1em; margin: 1em; } >+ #test2:empty { background: red; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ document.getElementById('test1').appendChild(document.createTextNode('')); >+ document.getElementById('test2').appendChild(document.createTextNode(' ')); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> The following two bars should be green. </p> >+ >+ <div id="test1"/> >+ <div id="test2"/> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d2.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d2.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..0affd27e1ac8e75e8e9014577b8336ea8b24f2c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d2.xml >@@ -0,0 +1,53 @@ >+<csstest def="Dynamic handling of combinators" module="W3C Selectors" modulename="css3-modsel" number="d2" rev="1.1" date="3-march-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ #test { background: red; display: block; padding: 1em; } >+ #stub ~ div div + div > div { background: lime; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <test:restrict xmlns:test="http://www.example.org/css3tests" for="xml xhtml"> >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ el = document.getElementById('test'); >+ el.parentNode.parentNode.insertBefore(document.createElementNS('http://www.w3.org/1999/xhtml', 'div'), el.parentNode); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ </test:restrict> >+ >+ <test:restrict xmlns:test="http://www.example.org/css3tests" for="html"> >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ el = document.getElementById('test'); >+ el.parentNode.parentNode.insertBefore(document.createElement('div'), el.parentNode); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ </test:restrict> >+ >+ <p> The following bar should be green. </p> >+ >+ <div id="stub"/> >+ <div/> >+ <div><div><!-- <div/> --><div><div id="test"/></div></div></div> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d3.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d3.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..ef3a9349f72cfa4598754609b73a6fc3797f4374 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d3.xml >@@ -0,0 +1,44 @@ >+<csstest def="Dynamic handling of attribute selectors" module="W3C Selectors" modulename="css3-modsel" number="d3" rev="1.3" date="24-february-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ [test] { background: red; display: block; padding: 1em; } >+ stub ~ [|attribute^=start]:not([|attribute~=mid])[|attribute*=dle][|attribute$=end] ~ t { background: lime; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ document.getElementsByTagNameNS('', 't')[1].setAttributeNS('', 'attribute', 'start middle end'); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> The following block should be green. </p> >+ >+ <!-- root of selector --> >+ <stub xmlns=""/> >+ >+ <!-- middle part of selector does not match this --> >+ <t xmlns="" attribute="fake"/> >+ >+ <!-- middle part of selector matches this once attribute is fixed --> >+ <t xmlns="" attribute="start mid dle end"/> >+ >+ <!-- subject of selector --> >+ <t xmlns="" test="test"/> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d4.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d4.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..4d1050a423188794b344f928172a3617a5b57557 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d4.xml >@@ -0,0 +1,34 @@ >+<csstest def="Dynamic updating of :first-child and :last-child" module="W3C Selectors" modulename="css3-modsel" number="d4" rev="1.1" date="3-march-2004" xmlns="http://www.example.org/css3tests"> >+ >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ #two:first-child { background: red; } >+ #three:last-child { background: lime; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ el2 = document.getElementById('two'); >+ el3 = document.getElementById('three'); >+ el2.parentNode.insertBefore(el3.nextSibling, el2); >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <div><p id="two">This line should be unstyled. (2)</p><p id="three">This line should have a green background. (3)</p><p>This line should be unstyled. (4 moving to 1)</p></div> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..70c9e12009100898b6e19672c70349c8c9136944 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5.xml-removed >@@ -0,0 +1,35 @@ >+<csstest def=":indeterminate" module="W3C Selectors" modulename="css3-modsel" number="d5" rev="1.1" date="20-october-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background:red } >+ input:indeterminate, input:indeterminate + span { background:green; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ /* Technically not part of DOM1 HTML but Tantek assures me that >+ is an oversight... */ >+ document.getElementById("test").indeterminate = true; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5a.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5a.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..e57f5e67914b413da605cedfac49526fc258db31 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5a.xml-removed >@@ -0,0 +1,35 @@ >+<csstest def=":indeterminate and :checked" module="W3C Selectors" modulename="css3-modsel" number="d5a" rev="1.1" date="20-october-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background: green; } >+ input:checked, input:checked + span { background: red; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ /* Technically not part of DOM1 HTML but Tantek assures me that >+ is an oversight... */ >+ document.getElementById("test").indeterminate = true; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5b.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5b.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..b8114fabca6ee30af649290b8fe05dee92a88a2f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5b.xml-removed >@@ -0,0 +1,36 @@ >+<csstest def="NEGATED :indeterminate and :checked" module="W3C Selectors" modulename="css3-modsel" number="d5b" rev="1.1" date="24-february-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background: red; } >+ input:not(:checked), input:not(:checked) + span { background: green; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ /* Microsoft specs for .indeterminate say that this is an invalid test >+ as an element can be both .checked and .indeterminate; however the >+ selectors spec says no element can be :checked:indeterminate. */ >+ document.getElementById("test").indeterminate = true; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox" checked="checked"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5c.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5c.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..a568e301d510d2a31707af366d3cee2a953a1b1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5c.xml-removed >@@ -0,0 +1,37 @@ >+<csstest def=":indeterminate and :checked" module="W3C Selectors" modulename="css3-modsel" number="d5c" rev="1.1" date="24-february-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background:red } >+ input:not(:indeterminate), input:not(:indeterminate) + span { background:green; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ /* Microsoft specs for .indeterminate say that this is an invalid test >+ as an element can be both .checked and .indeterminate; however the >+ selectors spec says no element can be :checked:indeterminate. */ >+ document.getElementById("test").indeterminate = true; >+ document.getElementById("test").checked = true; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5d.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5d.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..a8343d6ab833ed0a5b8e2061f3d2e4fdbb0bf2d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5d.xml-removed >@@ -0,0 +1,36 @@ >+<csstest def=":indeterminate with :checked" module="W3C Selectors" modulename="css3-modsel" number="d5d" rev="1.2" date="20-october-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background: green; } >+ input:indeterminate:checked, input:indeterminate:checked + span { background: red; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ /* Microsoft specs for .indeterminate say that this is an invalid test >+ as an element can be both .checked and ,indeterminate; however the >+ selectors spec says no element can be :checked:indeterminate. */ >+ document.getElementById("test").indeterminate = true; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox" checked="checked"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5e.xml-removed b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5e.xml-removed >new file mode 100644 >index 0000000000000000000000000000000000000000..ffe1b1a019bc9dbc5f5feb04d438a806d44d7cda >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5e.xml-removed >@@ -0,0 +1,33 @@ >+<csstest def="NEGATED :indeterminate with :checked" module="W3C Selectors" modulename="css3-modsel" number="d5e" rev="1.2" date="20-october-2005" xmlns="http://www.example.org/css3tests"> >+ >+<author>Tantek Çelik</author> >+<author>Ian Hickson</author> >+ >+<dynamic/> >+ >+<cssrules> >+ input, span { background:red } >+ input:not(:indeterminate):not(:checked), input:not(:indeterminate):not(:checked) + span { background:green; } >+</cssrules> >+ >+<code> >+ >+ <div xmlns="http://www.w3.org/1999/xhtml"> >+ >+ <script type="text/javascript"> >+ <![CDATA[ >+ >+ function test() { >+ document.getElementById("test").checked = false; >+ } >+ >+ window.setTimeout("test()", 100); >+ ]]> >+ </script> >+ >+ <p> <input id="test" type="checkbox" checked="checked"/> <span>Everything in this paragraph should have a green background.</span> </p> >+ >+ </div> >+ >+</code> >+</csstest> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..25387d08cf91b9168f26317c99d7aca0b723b710 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-005.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8" /> >+ <title>CSS Test (Selectors): Keyboard focus enables :focus-visible</title> >+ <link rel="author" title="Rob Dodson" href="robdodson@chromium.org" /> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo" /> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ :focus-visible { background-color: rgb(128, 196, 128); } >+ :focus:not(:focus-visible) { background-color: rgb(196, 128, 128); } >+ </style> >+</head> >+<body> >+ <ol id="instructions"> >+ <li>If the user-agent does not claim to support the <code>:focus-visible</code> pseudo-class then SKIP this test.</li> >+ <li>Click the button below that says "Click me."</li> >+ <li>If the element that says "I will be focused programmatically." does not have a <strong>green</strong> background, then the test result is FAILURE. If the element <em>has</em> a <strong>green</strong> background, then the test result is SUCCESS.</li> >+ </ol> >+ <br /> >+ <button id="button">Click me.</button> >+ <div id="el" tabindex="-1">I will be focused programmatically.</el> >+ <script> >+ button.addEventListener("click", () => { >+ el.focus(); >+ }); >+ async_test(function(t) { >+ el.addEventListener("focus", t.step_func(() => { >+ assert_equals(getComputedStyle(el).backgroundColor, >+ "rgb(128, 196, 128)"); >+ t.done(); >+ })); >+ el.focus(); >+ }, "Programmatic focus should always match :focus-visible"); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/htaccess b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/htaccess >new file mode 100644 >index 0000000000000000000000000000000000000000..c91ca1c3e52ffa387276decc32558c195f94c8d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/htaccess >@@ -0,0 +1 @@ >+AddDefaultCharset utf-8 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-full.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-full.css >new file mode 100644 >index 0000000000000000000000000000000000000000..fa306e5c535ad6277cdc5b51171273c732ce1087 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-full.css >@@ -0,0 +1,59 @@ >+/* same as xhtml.css minus namespace stuff */ >+ >+pre.rules { >+ border : 1px solid black ; >+ padding : 5px >+} >+ >+.WARNING { >+ background-color: black; >+ color: white; >+ font-weight: bold; >+ margin-top: 1em; >+} >+ >+div.testSource { >+ border: thin black solid; >+ padding-left: 1em; >+ padding-right: 1em; >+} >+ >+div.testDescription { >+ border: thin black solid; >+ background-color: red; >+} >+ >+.testDescription { >+ margin-top: 1em; >+ width: 100%; >+ border: thin solid black; >+} >+ >+.testDescription th, >+.testDescription td { >+ text-align: center; >+} >+ >+.testDescription th { >+ background-color: silver; >+} >+ >+.testDescription .a { >+ width: 25%; >+} >+ >+.testDescription .b { >+ width: 50%; >+} >+ >+.testDescription .c { >+ width: 100%; >+} >+ >+div.validator { >+ margin-top: 1em; >+} >+ >+div.validator img { >+ border-width : 0; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-shell.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-shell.css >new file mode 100644 >index 0000000000000000000000000000000000000000..1c23986cc7b21ee9b935607134c6835a15760feb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-shell.css >@@ -0,0 +1,73 @@ >+/* same as xhtml.css minus namespace stuff */ >+ >+pre.rules { >+ border : 1px solid black ; >+ padding : 5px >+} >+ >+.WARNING { >+ background-color: black; >+ color: white; >+ font-weight: bold; >+ margin-top: 1em; >+} >+ >+div.testSource { >+ border: thin black solid; >+ padding-left: 1em; >+ padding-right: 1em; >+} >+ >+div.testDescription { >+ border: thin black solid; >+ background-color: red; >+} >+ >+.testDescription { >+ margin-top: 1em; >+ width: 100%; >+ border: thin solid black; >+} >+ >+.testDescription th, >+.testDescription td { >+ text-align: center; >+} >+ >+.testDescription th { >+ background-color: silver; >+} >+ >+.testDescription .a { >+ width: 25%; >+} >+ >+.testDescription .b { >+ width: 50%; >+} >+ >+.testDescription .c { >+ width: 100%; >+} >+ >+div.validator { >+ margin-top: 1em; >+} >+ >+div.validator img { >+ border-width : 0; >+} >+ >+iframe, object { >+ display: block; >+ position: fixed; >+ top: static-position; >+ left: 1em; >+ right: 1em; >+ bottom: 1em; >+ margin: 0; >+ width: auto; >+ height: auto; >+ padding: 0; >+ border: thin black solid; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..30ef550185b4d033343b70907efb1fb97bb4fe07 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/OWNERS >@@ -0,0 +1 @@ >+@r12a >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/README b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/README >new file mode 100644 >index 0000000000000000000000000000000000000000..df60c5800acbc449917b82504fe6a8c44649ec66 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/README >@@ -0,0 +1,2 @@ >+See http://www.w3.org/International/tests/ >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e88f20a02471e324ee5d5900add484142cbf5ce8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-001.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box:lang(es) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value that matches an identical lang attribute value on the same element will produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..71ae3d46f686c6e6b6d030f492072f48e46faa1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-002.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), lang="es" on parent</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box:lang(es) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test" lang="es"><div id="box"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value that matches an identical lang attribute value on a parent element will produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-004.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-004.html >new file mode 100644 >index 0000000000000000000000000000000000000000..582b4821cfa0168ab1cbbb906fc7a0097541b814 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-004.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), lang="ES"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(es) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="ES"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value will match a lang attribute value regardless of case differences."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-005.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5e0f2d3913bffb83ee52952aadea2f7789e9def6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-005.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), lang="es-MX"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(es) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es-MX"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value will match a lang attribute value when the latter contains additional subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-006.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-006.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8362ca9364e843f30d07ad6289b9c270ba4391bd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-006.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es-MX), lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(es-MX) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A :lang value will NOT match a lang attribute value when the former contains more subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-007.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-007.html >new file mode 100644 >index 0000000000000000000000000000000000000000..674fa50afcc06133dae4c59e2a3c98b681efd6c8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-007.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), lang="mx-es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(es-MX) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="mx-es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "When the :lang value uses a single subtag, it will NOT match against an attribute value where it appears in a different position."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-008.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-008.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f3e5791c437e42be1b1bfd859d141aa6cab90a2d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-008.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(en-GB), lang="en-GB"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(en-GB) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value with language and region subtags will match a lang attribute value with the same subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-009.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-009.html >new file mode 100644 >index 0000000000000000000000000000000000000000..10c52bad3f40976cae6ea2f2b3a65312239b6061 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-009.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(en-GB), lang="en-GB-scouse"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(en-GB) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB-scouse"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value with a multiple subtags will match a lang attribute value with multiple subtags as long as the first part is the same."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-010.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-010.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1ffed8a577b28b9d065191f976201c2aba5738e8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-010.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(en-GB), lang="en-US"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(en-GB) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-US"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A :lang value and a lang attribute value will NOT match if their region subtags differ."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-011.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-011.html >new file mode 100644 >index 0000000000000000000000000000000000000000..98e476374e78444125f207394620f23d5529835c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-011.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(az-Arab-IR), lang="az-Arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(az-Arab-IR) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-Arab-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value with language, script and region subtags will match a lang attribute value with the same language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-012.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-012.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d1db2a2209ed28bff9c69a4d32e11048f4471c51 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-012.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(az-Arab-IR), lang="az-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(az-Arab-IR) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A :lang value with language, script and region subtags will NOT match a lang attribute value with the script subtag missing."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-014.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-014.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2b4d37122519e3e4c03d2f08bb0f40ebf0e9a864 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-014.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(cs-CZ), lang="cs-Latn-CZ"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(cs-CZ) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="cs-Latn-CZ"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A :lang value with language and region subtags will NOT match a lang attribute value with language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-015.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-015.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8dbdee84f98ad7fec947f1faa577e721554f8aa3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-015.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(az-Arab-IR), lang="az-arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(az-Arab-IR) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-arab-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A :lang value will match a lang attribute value regardless of case differences in the script tag."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-016.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-016.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a27b0000666bf6a1367efca0bf8ec04f9cf20696 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-016.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>:lang(es), xml:lang="es" (html)</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#lang-pseudo'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest:lang(xx) { display:none; } >+#box:lang(es) { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" xml:lang="es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on :lang for results, but :lang is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to :lang support. If :lang is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A :lang value that matches an identical xml:lang attribute value will NOT produce styling in pages served as HTML."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-021.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-021.html >new file mode 100644 >index 0000000000000000000000000000000000000000..04cc4431b81526240e042e9b4269633b2d1475fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-021.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang|='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value that matches an identical lang attribute value on the same element will produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-022.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-022.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b4ed986971f10efd6e96f70c88bbfc4da956bc93 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-022.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], lang="es" on parent</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang|='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test" lang="es"><div id="box"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value that matches an identical lang attribute value on the parent element will NOT produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-024.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-024.html >new file mode 100644 >index 0000000000000000000000000000000000000000..620fb6a92a86e8f41d3a13392b42196536366de7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-024.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], lang="ES"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="ES"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value will match a lang attribute value regardless of case differences."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-025.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-025.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e6f4246d65963d7a9144889f4e65c165f186a5a4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-025.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], lang="es-MX"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es-MX"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value will match a lang attribute value when the latter contains additional subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-026.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-026.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c83a5c45d1d90a6560d78a6f4a432f3e1290aa86 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-026.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es-MX"], lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es-MX'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value will NOT match a lang attribute value when the former contains more subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-027.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-027.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c73324c8df91de576eb4f9308c3233fd9c09687c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-027.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], lang="mx-es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="mx-es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "When the lang|= value uses a single subtag, it will NOT match against an attribute value where it appears in a different position."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-028.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-028.html >new file mode 100644 >index 0000000000000000000000000000000000000000..81c558ee81c42ffe742a958e5ac7a23d71ae5516 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-028.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="en-GB"], lang="en-GB"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='en-GB'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value with language and region subtags will match a lang attribute value with the same subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-029.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-029.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c65a7c2924a6d71079c81a719dd2c1096c1f3e40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-029.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="en-GB"], lang="en-GB-scouse"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='en-GB'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB-scouse"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value with a multiple subtags will match a lang attribute value with multiple subtags as long as the first part is the same."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-030.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-030.html >new file mode 100644 >index 0000000000000000000000000000000000000000..40c8a7d363f464c14b98e2e90e11d005300238bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-030.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="en-GB"], lang="en-US"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es-GB'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-US"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value and a lang attribute value will NOT match if their region subtags differ."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-031.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-031.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6ae738629783c3017328729d25f273583347ab79 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-031.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="az-Arab-IR"], lang="az-Arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='az-Arab-IR'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-Arab-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value with language, script and region subtags will match a lang attribute value with the same language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-032.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-032.html >new file mode 100644 >index 0000000000000000000000000000000000000000..63cadb4c5eb0122e271d488d75a2cf0c1b3be104 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-032.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="az-Arab-IR"], lang="az-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='az-Arab-IR'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value with language, script and region subtags will NOT match a lang attribute value with the script subtag missing."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-034.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-034.html >new file mode 100644 >index 0000000000000000000000000000000000000000..42569617491e2ad6c5140988b6e79eca241af617 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-034.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="cs-CZ"], lang="cs-Latn-CZ"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='cs-CZ'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="cs-Latn-CZ"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value with language and region subtags will NOT match a lang attribute value with language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-035.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-035.html >new file mode 100644 >index 0000000000000000000000000000000000000000..df77c404ff3064df5c5cd7c52e536cfe9866bd50 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-035.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="az-Arab-IR"], lang="az-arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='az-Arab-IR'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-arab-IR"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang|= value will match a lang attribute value regardless of case differences in the script tag."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-036.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-036.html >new file mode 100644 >index 0000000000000000000000000000000000000000..152c8c935db139e581070dc553f6bf014d61e144 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-036.html >@@ -0,0 +1,40 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang|="es"], xml:lang="es" (html)</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+ #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } >+ #colonlangcontroltest[lang|=xx] { display:none; } >+#box[lang|='es'] { width: 100px; } >+#relevance[lang|='yy'] { display:none; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" xml:lang="es"> </div></div> >+<p lang='xx' id='colonlangcontroltest'>This test failed because it relies on [lang|=..] for results, but [lang|=..] is not supported by this browser. >+ >+ >+<!-- Notes: >+This tests a detail related to [lang|=..] support. If [lang|=..] is not supported, a message will appear and the test will fail. >+ --> >+<script> >+test(function() { >+assert_equals(document.getElementById('colonlangcontroltest').offsetWidth, 0) >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A [lang|='es'] value that matches an identical xml:lang attribute value will NOT produce styling in pages served as HTML."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-041.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-041.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1de94e2b92fa1a25335129c526162aecada6bbbc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-041.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang= value that matches an identical lang attribute value on the same element will produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-042.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-042.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5f8d799c7013dbd377d6e98f309dbda465bf4e04 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-042.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], lang="es" on parent</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test" lang="es"><div id="box"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang|= value that matches an identical lang attribute value on the parent element will NOT produce styling."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-044.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-044.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bab7033cecc45757e0b41355c9e690ac78cb250e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-044.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], lang="ES"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="ES"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang= value will match a lang attribute value regardless of case differences."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-045.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-045.html >new file mode 100644 >index 0000000000000000000000000000000000000000..96941e91abfc0213748e9f335d27559082b9fb22 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-045.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], lang="es-MX"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es-MX"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value will NOT match a lang attribute value when the latter contains additional subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-046.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-046.html >new file mode 100644 >index 0000000000000000000000000000000000000000..07af0a228531462714c0f462a8cf476fb3d2754a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-046.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es-MX"], lang="es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es-MX'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value will NOT match a lang attribute value when the former contains more subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-047.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-047.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a56364395c0654f3925b0ebfdadefb543a843df6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-047.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], lang="mx-es"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="mx-es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "When the lang= value uses a single subtag, it will NOT match against an attribute value where it appears in a different position."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-048.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-048.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4c8f297f7f0bd4ea1050c0b82399d5323f9d0b1e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-048.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="en-GB"], lang="en-GB"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='en-GB'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang= value with language and region subtags will match a lang attribute value with the same subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-049.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-049.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b7d1a7ebf6b32f050912c8b3649319d9c17866e4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-049.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="en-GB"], lang="en-GB-scouse"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='en-GB'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-GB-scouse"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value with multiple subtags will NOT match a lang attribute value with multiple subtags if the latter has more subtags, even if the first two subtags are the same."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-050.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-050.html >new file mode 100644 >index 0000000000000000000000000000000000000000..52d7bf1c173e862387fcaac45e0a143ad95bd55a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-050.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="en-GB"], lang="en-US"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='en-GB'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="en-US"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value and a lang attribute value will NOT match if their region subtags differ."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-051.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-051.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7881d532569db18ce7fc5f24694cef19fe8c0f7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-051.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="az-Arab-IR"], lang="az-Arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='az-Arab-IR'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-Arab-IR"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang= value with language, script and region subtags will match a lang attribute value with the same language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-052.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-052.html >new file mode 100644 >index 0000000000000000000000000000000000000000..386a717cb3cd74dd038073f7132ff86d937aaabb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-052.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="az-Arab-IR"], lang="az-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='az-Arab-IR'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-IR"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value with language, script and region subtags will NOT match a lang attribute value with the script subtag missing."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-054.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-054.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8732daf05e1187fed72d6ed62a94b2f619498243 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-054.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="cs-CZ"], lang="cs-Latn-CZ"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='cs-CZ'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="cs-Latn-CZ"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A lang= value with language and region subtags will NOT match a lang attribute value with language, script and region subtags."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-055.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-055.html >new file mode 100644 >index 0000000000000000000000000000000000000000..388a287ae9e83bc3dbb77b8f9011a8da2b05a765 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-055.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="az-Arab-IR"], lang="az-arab-IR"</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='az-Arab-IR'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" lang="az-arab-IR"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 100); >+}, "A lang= value will match a lang attribute value regardless of case differences in the script tag."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-056.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-056.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8bec0fab08bf28d584054546fed0312156116526 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-056.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html lang="en" > >+<head> >+<meta charset="utf-8"/> >+<title>[lang="es"], xml:lang="es" (html)</title> >+<link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> >+<link rel='help' href='http://www.w3.org/TR/css3-selectors/#attribute-selectors'> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<meta name='flags' content='HTMLonly'> >+<style type='text/css'> >+.test div { width: 50px; } >+#box[lang='es'] { width: 100px; } >+</style> >+</head> >+<body> >+ >+ >+ >+<div class="test"><div id="box" xml:lang="es"> </div></div> >+ >+ >+<script> >+test(function() { >+assert_equals(document.getElementById('box').offsetWidth, 50); >+}, "A [lang='es'] value that matches an identical xml:lang attribute value will NOT produce styling in pages served as HTML."); >+</script> >+ >+<div id='log'></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..7fee5377ee5e32f0f99ebb257084eb53da98327a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/w3c-import.log >@@ -0,0 +1,60 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/README >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-002.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-004.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-005.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-007.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-008.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-009.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-010.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-011.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-012.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-014.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-015.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-016.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-021.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-022.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-024.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-025.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-026.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-027.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-028.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-029.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-030.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-031.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-032.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-034.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-035.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-036.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-041.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-042.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-044.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-045.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-046.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-047.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-048.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-049.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-050.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-051.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-052.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-054.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-055.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/i18n/css3-selectors-lang-056.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/any-link-pseudo.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/any-link-pseudo.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9792fd0ebe1c77307ec1cfb6f572fc5d8e139e6a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/any-link-pseudo.html >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Selectors Invalidation: :any-link</title> >+ <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-any-link-pseudo"> >+ <meta name="assert" content="This tests that the :any-link selector is effective"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ #link { background-color: red } >+ #link:any-link { background-color: green } >+ #link + div { color: pink } >+ </style> >+ <a id="link">This link should have a green background.</a> >+ <div> >+ <div></div> >+ <div></div> >+ <div></div> >+ <div></div> >+ </div> >+ <script> >+ test(function() { >+ var red = "rgb(255, 0, 0)"; >+ var green = "rgb(0, 128, 0)"; >+ >+ assert_equals(getComputedStyle(link).backgroundColor, red); >+ >+ link.href = "not-visited.html"; >+ >+ assert_equals(getComputedStyle(link).backgroundColor, green); >+ }, "Style was recalculated for the :any-link pseudo class."); >+ >+ </script> >+ </head> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/matches.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/matches.html >new file mode 100644 >index 0000000000000000000000000000000000000000..634ded3c7d760f6dccb2c14e87cf67f1c1320da5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/matches.html >@@ -0,0 +1,139 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Selectors Invalidation: :matches()</title> >+ <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> >+ <meta name="assert" content="This tests that the :matches() selector is effective"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ .b { >+ color: yellow; >+ } >+ /*Simple selector arguments */ >+ .a :matches(.b, .c) { >+ color: red; >+ } >+ /*Compound selector arguments */ >+ .a :matches(.c#d, .e) { >+ color: green; >+ } >+ /* Complex selector arguments */ >+ .a .g>.b { >+ color: black; >+ } >+ .a :matches(.e+.f, .g>.b, .h) { >+ color: blue; >+ } >+ .g>.b { >+ color: black; >+ } >+ .a .h { >+ color: black; >+ } >+ /* Nested */ >+ .a+.c>.e { >+ color: black; >+ } >+ .c>.a+.e { >+ color: black; >+ } >+ .a+:matches(.b+.f, :matches(.c>.e, .g)) { >+ color: red; >+ } >+ .c>.e { >+ color: black; >+ } >+ </style> >+ </head> >+ <body> >+ <div id="a1"> >+ <div class="b" id="b1"> >+ Red >+ </div> >+ <div class="c" id="c1"> >+ Red >+ </div> >+ <div class="c" id="d"> >+ Green >+ </div> >+ <div class="e" id="e1"> >+ Green >+ </div> >+ <div class="f" id="f1"> >+ Blue >+ </div> >+ <div class="g"> >+ <div class="b" id="b2"> >+ Blue >+ <div class="b" id="b3"> >+ Red >+ </div> >+ </div> >+ </div> >+ <div class="h" id="h1"> >+ Black >+ </div> >+ </div> >+ <div class="c" id="c2"> >+ <div id="a2"></div> >+ <div class="e" id="e2"> >+ Red >+ </div> >+ </div> >+ <script> >+ document.body.offsetTop; >+ >+ var black = "rgb(0, 0, 0)"; >+ var blue = "rgb(0, 0, 255)"; >+ var green = "rgb(0, 128, 0)"; >+ var red = "rgb(255, 0, 0)"; >+ var yellow = "rgb(255, 255, 0)"; >+ >+ test(() => { >+ assert_equals(getComputedStyle(b1).color, yellow); >+ assert_equals(getComputedStyle(b2).color, black); >+ assert_equals(getComputedStyle(b3).color, yellow); >+ assert_equals(getComputedStyle(c1).color, black); >+ assert_equals(getComputedStyle(d).color, black); >+ assert_equals(getComputedStyle(e1).color, black); >+ assert_equals(getComputedStyle(e2).color, black); >+ assert_equals(getComputedStyle(f1).color, black); >+ assert_equals(getComputedStyle(h1).color, black); >+ }, "Preconditions."); >+ >+ test(() => { >+ a1.className = "a"; >+ assert_equals(getComputedStyle(b1).color, red); >+ assert_equals(getComputedStyle(b3).color, red); >+ assert_equals(getComputedStyle(c1).color, red); >+ }, "Invalidate :matches() for simple selector arguments."); >+ >+ test(() => { >+ a1.className = "a"; >+ assert_equals(getComputedStyle(d).color, green); >+ }, "Invalidate :matches() for compound selector arguments."); >+ >+ test(() => { >+ a1.className = "a"; >+ assert_equals(getComputedStyle(b2).color, blue); >+ assert_equals(getComputedStyle(b3).color, red); >+ assert_equals(getComputedStyle(f1).color, blue); >+ }, "Invalidate :matches() for complex selector arguments."); >+ >+ test(() => { >+ a1.className = "a"; >+ assert_equals(getComputedStyle(e2).color, black); >+ a2.className = "a"; >+ assert_equals(getComputedStyle(e2).color, red); >+ }, "Invalidate nested :matches()."); >+ >+ test(() => { >+ a1.className = "a"; >+ assert_equals(getComputedStyle(b2).color, blue); >+ assert_equals(getComputedStyle(h1).color, black); >+ }, "Test specificity of :matches()."); >+ </script> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e9c6209d0a8e905903ea84bc7d76016fe4949e28 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html >@@ -0,0 +1,27 @@ >+<!-- Quirks mode --> >+<meta charset="utf-8"> >+<title>Invalidation of style due to a dynamic stylesheet change in quirks mode</title> >+<link rel="help" href="https://html.spec.whatwg.org/#case-sensitivity-of-selectors"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1433589"> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ #foo { >+ width: 100px; >+ height: 100px; >+ background: red; >+ } >+</style> >+Should see a green square below. >+<div id="foo"></div> >+<script> >+test(function() { >+ let foo = document.getElementById('foo'); >+ assert_equals(getComputedStyle(foo).backgroundColor, "rgb(255, 0, 0)"); >+ let style = document.createElement('style'); >+ style.textContent = "#FoO { background: green; }"; >+ document.body.appendChild(style); >+ assert_equals(getComputedStyle(foo).backgroundColor, "rgb(0, 128, 0)"); >+}, "Style should've changed to a green background"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c705c2b3e85f591076f34e202c9a41b1ae0ff271 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: invalidation of class changes when the selector in a rule has changed</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ body { background: green; } >+ .red { background: red; } >+</style> >+<body class="red"> >+Should have a green background. >+<script> >+test(() => { >+ document.body.offsetTop; >+ assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(255, 0, 0)"); >+ document.body.className = ""; >+ document.styleSheets[0].cssRules[1].selectorText = ".bar"; >+ assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(0, 128, 0)"); >+}, "Style should be recomputed correctly when the selector it depends on changes"); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7b704eca97ff5bf725379692174e1d1b2fb3f425 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html >@@ -0,0 +1,26 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: invalidation of class changes when the sheet the style depends on goes away</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<style> >+ body { background: green; } >+</style> >+<style id="style"> >+ .red { background: red; } >+</style> >+<body class="red"> >+Should have a green background. >+<script> >+test(() => { >+ document.body.offsetTop; >+ assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(255, 0, 0)"); >+ document.body.className = ""; >+ style.remove(); >+ assert_equals(getComputedStyle(document.body).backgroundColor, "rgb(0, 128, 0)"); >+}, "Style should be recomputed correctly when the stylesheet it depends on goes away"); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..67841617736730e588f5659fd485fb09a159bd33 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-expected.html >@@ -0,0 +1,7 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test Reference</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<p style="color: green"> >+ Should be green. >+</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..41778239518d4d9b602f7fc18ee3ea5c910da85b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html >@@ -0,0 +1,23 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>CSS Test: invalidation of class changes when the sheet the style depends on goes away</title> >+<link rel="author" title="Emilio Cobos Ãlvarez" href="mailto:emilio@crisal.io"> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1432850"> >+<link rel="match" href="sheet-going-away-002-ref.html"> >+<style> >+ p { color: green; } >+</style> >+<style id="style"> >+ .red p { color: red; } >+</style> >+<body class="red"> >+<p> >+ Should be green. >+</p> >+<script> >+document.body.offsetTop; >+document.body.className = ""; >+style.remove(); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..c9430d2206be84f53fa5292cfa6a575c2b791643 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/w3c-import.log >@@ -0,0 +1,23 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/any-link-pseudo.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/matches.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/selectorText-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/sheet-going-away-002.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-nested.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-nested.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b82d43d09017955af2904f6362e858929a6d4399 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-nested.html >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Selectors: :matches()</title> >+ <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> >+ <meta name="assert" content="This tests that the :matches() selector is effective when nested"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ /* Testing that highest specificity is chosen for class outside of :matches() */ >+ .a+.b+.c>.e+.d { >+ color: black; >+ font-size: 10px; >+ width: 10px; >+ } >+ .a+:matches(.b+.f, .b+:matches(*, .c>.e, .g, *))+.d { >+ color: red; >+ font-size: 20px; >+ } >+ .a+.b+.c>.e+.d { >+ color: yellow; >+ } >+ /* Testing specificty of a class within :matches() */ >+ .a+.c>.e { >+ color: black; >+ } >+ .a+:matches(.b+.f, :matches(.c>.e, .g)) { >+ color: red; >+ } >+ .c>.e { >+ color: black; >+ } >+ </style> >+ </head> >+ <body> >+ <div class="a"> >+ </div> >+ <div class="b" id="b2"> >+ </div> >+ <div class="c" id="c2"> >+ <div class="e"> >+ </div> >+ <div class="d" id="d1"> >+ Yellow >+ </div> >+ </div> >+ <div class="a"> >+ </div> >+ <div class="c" id="c2"> >+ <div class="e" id="e1"> >+ Red >+ </div> >+ </div> >+ <script> >+ >+ var red = "rgb(255, 0, 0)"; >+ var yellow = "rgb(255, 255, 0)"; >+ >+ test(() => { >+ assert_equals(getComputedStyle(d1).color, yellow); >+ assert_equals(getComputedStyle(d1).fontSize, "20px"); >+ assert_equals(getComputedStyle(d1).width, "10px"); >+ }, "Test nested :matches() chooses highest specificity for class outside :matches()."); >+ >+ test(() => { >+ assert_equals(getComputedStyle(e1).color, red); >+ }, "Test nested :matches() specificity for class within arguments."); >+ >+ </script> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-specificity.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-specificity.html >new file mode 100644 >index 0000000000000000000000000000000000000000..41d7251a3d74efbdf69407889418797a80289316 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-specificity.html >@@ -0,0 +1,41 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title>CSS Selectors: :matches()</title> >+ <link rel="author" title="Victoria Su" href="mailto:victoriaytsu@google.com"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> >+ <meta name="assert" content="This tests that the :matches() selector chooses the correct specificity"> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <style> >+ .b.c + .d + .q.r + .s + #target { >+ font-size: 10px; >+ height: 10px; >+ width: 10px; >+ } >+ :matches(.a, .b.c + .d, .e) + :matches(* + .p, .q.r + .s, * + .t) + #target { >+ height: 20px; >+ width: 20px; >+ } >+ .b.c + .d + .q.r + .s + #target { >+ width: 30px; >+ } >+ </style> >+ </head> >+ <body> >+ <div class="b c"></div> >+ <div class="a d e"></div> >+ <div class="q r"></div> >+ <div class="p s t"></div> >+ <div id="target"></div> >+ <script> >+ >+ test(() => { >+ assert_equals(getComputedStyle(target).width, "30px"); >+ assert_equals(getComputedStyle(target).height, "20px"); >+ assert_equals(getComputedStyle(target).fontSize, "10px"); >+ }, "Test :matches() uses highest possible specificity"); >+ >+ </script> >+ </body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/missing-right-token.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/missing-right-token.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8fe33a95795354117177f78eae7f1081ef0b1947 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/missing-right-token.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta id="expected" charset="utf-8"> >+ <title>Selectors: attribute selectors with missing right token</title> >+ <link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org"> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#attribute-selectors"> >+ <link rel="help" href="https://drafts.csswg.org/css-syntax/#rule-defs"> >+ <meta name="assert" content="Checks attribute selectors with missing right token are matched."> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+ >+ >+ <div id="container"> >+ <span></span> >+ <span class="cls"></span> >+ </div> >+ >+ <script> >+ test(() => { >+ assert_equals(document.querySelector('meta[charset="utf-8"'), expected); >+ assert_equals(document.querySelector('meta[charset="utf-8'), expected); >+ >+ assert_equals(container.querySelectorAll('span:not([class]').length, 1); >+ assert_equals(container.querySelectorAll('span:not([class').length, 1); >+ }, "attribute selectors with missing right tokens succeed"); >+ </script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/blue15x15.png b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/blue15x15.png >new file mode 100644 >index 0000000000000000000000000000000000000000..89de32fdb8a4e48b1320f40f5a75352773077cee >GIT binary patch >literal 185 >zcmeAS@N?(olHy`uVBq!ia0vp^{2<K11SGd?VUh(>oCO|{#S9F5he4R}c>anMpde#$ >zkh>GZx^prwfgF}}M_)$<hK>E)e-c@Ne1&9>AYTTCDm4a%h86~fUqGRT7Yq!g1`G_Z >z5*Qe)W-u^_7tGleXakf`@^o<w(FjgXN%(Qzfs0|4n%u+%B2Ty;@ydnvnyztk0=k6z >V)g}Gv*iewk44$rjF6*2UngFS5E#&|J > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..7fd84b2faae349ff6dd4dcfeb49fa4934aa3c09e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/resources/blue15x15.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/root-siblings.htm b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/root-siblings.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..99c0cb4c26294d1d8b655ed0a35d1f0eeb4a9ccb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/root-siblings.htm >@@ -0,0 +1,16 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>CSS Test: Parsing check for * ~ :root error handling</title> >+<link rel="author" title="Microsoft" href="http://www.microsoft.com/"> >+<link rel="help" href="https://drafts.csswg.org/selectors-3/#selector-syntax"> >+<link rel="match" href="../CSS2/reference/ref-this-text-should-be-green.xht"> >+<meta name="assert" content="* ~ :root should not match anything"> >+<style> >+* ~ :root p { >+ color: red; >+} >+p { >+ color: green; >+} >+</style> >+<p>This text should be green.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..df3d946ecb34d689a7bfdc43c4957a9726988aec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >+<script> >+onload = () => { >+ getSelection().removeAllRanges(); >+ let r = document.createRange(); >+ r.selectNode(document.documentElement); >+ getSelection().addRange(r); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ad2104bef671991a802c1750e6a2a6be1a7144a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html >@@ -0,0 +1,7 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-noref.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-noref.html >new file mode 100644 >index 0000000000000000000000000000000000000000..df3d946ecb34d689a7bfdc43c4957a9726988aec >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-noref.html >@@ -0,0 +1,15 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >+<script> >+onload = () => { >+ getSelection().removeAllRanges(); >+ let r = document.createRange(); >+ r.selectNode(document.documentElement); >+ getSelection().addRange(r); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..51a1643c4e5e581363dfd530fe6dcc41217592a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001.html >@@ -0,0 +1,24 @@ >+<!doctype html> >+<title>::selection is respected on images</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<link rel="mismatch" href="selection-image-001-noref.html"> >+<style> >+img::-moz-selection { >+ background: green; >+} >+img::selection { >+ background: green; >+} >+</style> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >+<script> >+onload = () => { >+ getSelection().removeAllRanges(); >+ let r = document.createRange(); >+ r.selectNode(document.documentElement); >+ getSelection().addRange(r); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ad2104bef671991a802c1750e6a2a6be1a7144a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html >@@ -0,0 +1,7 @@ >+<!doctype html> >+<title>CSS Test Reference</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002.html >new file mode 100644 >index 0000000000000000000000000000000000000000..72958da20776ed3b4ed1619c334d7432e2fda4e1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002.html >@@ -0,0 +1,16 @@ >+<!doctype html> >+<title>CSS Test: Image and text selection is painted.</title> >+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Ãlvarez"> >+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1449010"> >+<link rel="mismatch" href="selection-image-001-no-selection-noref.html"> >+<p> >+ Some text <img src="resources/blue15x15.png"> some more. >+</p> >+<script> >+onload = () => { >+ getSelection().removeAllRanges(); >+ let r = document.createRange(); >+ r.selectNode(document.documentElement); >+ getSelection().addRange(r); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6523fd3b64fbf10693c9d6c9a05b2da6328d6684 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root-expected.html >@@ -0,0 +1,7 @@ >+<!DOCTYPE html> >+<style> >+html { background: green; } >+</style> >+<body> >+ >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2009ec17fb23638d1a9010052f8e72f29bf838d9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root.html >@@ -0,0 +1,8 @@ >+<!DOCTYPE html> >+<style> >+html { background: red; } >+html:nth-child(1):nth-last-child(1):nth-of-type(1):nth-last-of-type(1):first-child:last-child:only-child:first-of-type:last-of-type:only-of-type { background: green; } >+</style> >+<link rel="help" href="https://www.w3.org/TR/css3-selectors/#structural-pseudos"> >+<link rel="match" href="selector-structural-pseudo-root-ref.html"> >+<meta name="assert" content="Structural pseudo-classes match the root element, sibling pseudos are based on siblings without needing a parent (Selectors 3 erratum)"> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001-expected.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3b768b36a50cd46c3fae0de91c63f8231fde7811 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001-expected.html >@@ -0,0 +1,11 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Selectors: White space in attribute selectors (reference)</title> >+<link rel="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au"/> >+<style> >+body { color: green; } >+</style> >+<p>This text should be green.</p> >+<p>This text should be green.</p> >+<p>This text should be green.</p> >+<p>This text should be green.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001.html >new file mode 100644 >index 0000000000000000000000000000000000000000..62df884cf4558e7091efb35e2a390e2b53befe25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001.html >@@ -0,0 +1,19 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Selectors: White space in attribute selectors</title> >+<link rel="author" title="Cameron McCormack" href="mailto:cam@mcc.id.au"/> >+<link rel="help" href="https://drafts.csswg.org/selectors-3/#w3cselgrammar"/> >+<link rel="help" href="https://drafts.csswg.org/selectors-4/#grammar"/> >+<link rel="match" href="selectors-attr-white-space-001-ref.html"/> >+<style> >+body { color: red; } >+[ data-test-1] { color: green; } >+[data-test-2 ] { color: green; } >+[data-test-3 = x] { color: green; } >+[ |data-test-4] { color: green; } >+[ | data-test-4] { color: red; } >+</style> >+<p data-test-1="">This text should be green.</p> >+<p data-test-2="">This text should be green.</p> >+<p data-test-3="x">This text should be green.</p> >+<p data-test-4="">This text should be green.</p> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001-expected.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001-expected.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..3f1b3f42a89399fec3ca03c4f69aa1e75527a0a3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001-expected.xml >@@ -0,0 +1,40 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+<title>CSS: 15 simple tests of :empty</title> >+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> >+<style type="text/css"> >+tests, tests * { >+ display: block; >+} >+tests > * { >+ border: solid thick lime; >+ height: 1em; >+ padding: 4px; >+ margin: 4px; >+ color: white; >+} >+</style> >+</head> >+<body> >+<p>Below there should be fifteen big green boxes and no red.</p> >+<tests xmlns="http://www.example.org/" type="positive"> >+ <test1/> >+ <test2/> >+ <test3/> >+ <test4/> >+ <test5/> >+</tests> >+<tests xmlns="http://www.example.org/" type="negative"> >+ <test1/> >+ <test2/> >+ <test3/> >+ <test4/> >+ <test5/> >+ <test6/> >+ <test7/> >+ <test8/> >+ <test9/> >+ <test10/> >+</tests> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..20ccf419ac21fac43dbd4dfac7bf7c066f11603a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001.xml >@@ -0,0 +1,47 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS: 15 simple tests of :empty</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#empty-pseudo"/> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-empty-pseudo"/> >+ <link rel="match" href="selectors-empty-001-ref.xml"/> >+ <meta name="flags" content="nonHTML"/> >+ <style type="text/css"> >+ tests, tests * { >+ display: block; >+ } >+ tests > * { >+ border: solid thick red; >+ height: 1em; >+ padding: 4px; >+ margin: 4px; >+ color: white; >+ } >+ tests[type=positive] > :empty, tests[type=negative] > :not(:empty) { >+ border: solid thick lime; >+ } >+ </style> >+ </head> >+ <body> >+ <p>Below there should be fifteen big green boxes and no red.</p> >+ <tests xmlns="http://www.example.org/" type="positive"> >+ <test1/> >+ <test2></test2> >+ <test3><!-- --></test3> >+ <test4><?testfour?></test4> >+ <test5 title="data"></test5> >+ </tests> >+ <tests xmlns="http://www.example.org/" type="negative"> >+ <test1><test1> </test1></test1> >+ <test2>green!</test2> >+ <test3>><</test3> >+ <test4>☃</test4> >+ <test5><test5/></test5> >+ <test6> </test6> >+ <test7> <!-- --></test7> >+ <test8> <?testfour?></test8> >+ <test9><!-- --> </test9> >+ <test10><?testfour?> </test10> >+ </tests> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001-expected.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001-expected.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..8c8ee979a88f80c15efec81e6bbebe1987b11d42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001-expected.xml >@@ -0,0 +1,14 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+<head> >+<title>Selectors Reftest Reference</title> >+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/> >+<style type="text/css"> >+body { >+ color: green; >+} >+</style> >+</head> >+<body> >+This text should be green. >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001.xml b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001.xml >new file mode 100644 >index 0000000000000000000000000000000000000000..d46f13413346098dbd65b1e9ceff5fb8368e863e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001.xml >@@ -0,0 +1,21 @@ >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>CSS: 1 simple test of namespaces (attributes)</title> >+ <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch"/> >+ <link rel="alternate" href="http://www.hixie.ch/tests/adhoc/css/selectors/namespace/001.xml"/> >+ <link rel="help" href="https://drafts.csswg.org/selectors-3/#attrnmsp"/> >+ <link rel="help" href="https://drafts.csswg.org/selectors-4/#attrnmsp"/> >+ <link rel="match" href="selectors-namespace-001-ref.xml"/> >+ <style type="text/css"> >+ @namespace html url(http://www.w3.org/1999/xhtml); >+ @namespace test url(http://www.example.org/); >+ html|body { color: red; } >+ [test] { color: green; } >+ </style> >+ </head> >+ <body> >+ <test test="test" xmlns="http://www.example.org/"> >+ This text should be green. >+ </test> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/tng.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/tng.css >new file mode 100644 >index 0000000000000000000000000000000000000000..3f44bc7342634a743ceabdbabfb09fcb998db6ae >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/tng.css >@@ -0,0 +1,6 @@ >+BODY {color: black; background: #CCCCCC; margin:0;} >+A:link {color: blue;} >+A:visited {color: #006600;} >+.navigation { padding: 15px 10px;} >+OBJECT { border:none; width:100%;} >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid.html b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f0c3d93cbea2430a98e1c524910ded94567a70d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid.html >@@ -0,0 +1,20 @@ >+<!doctype html> >+<title>Support for the :user-invalid pseudo-class</title> >+<link rel="help" href="https://drafts.csswg.org/selectors/#user-pseudos"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<input> >+<script> >+test(() => { >+ const input = document.querySelector('input'); >+ // The selector can't match because no interaction has happened. >+ assert_false(input.matches(':user-invalid')); >+}, ':user-invalid selector should be supported'); >+ >+// historical: https://github.com/w3c/csswg-drafts/issues/1329 >+test(() => { >+ const input = document.querySelector('input'); >+ // matches() will throw if the selector isn't suppported >+ assert_throws("SyntaxError", () => input.matches(':user-error')); >+}, ':user-error selector should not be supported'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/generators.pm b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/generators.pm >new file mode 100644 >index 0000000000000000000000000000000000000000..987fcddd10134164c128479811a09cb8b7117351 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/generators.pm >@@ -0,0 +1,1319 @@ >+package utils::generators; >+use strict; >+use utils::helpers; >+1; >+ >+sub extensions { >+ my($type) = @_; >+ return 'html' if $type eq 'tng'; >+ return $type =~ m/^(?:|.*[^x])html/o ? 'html' : 'xml'; >+} >+ >+############################################################################## >+# Index Generators # >+############################################################################## >+ >+sub generateTopIndex { # points to test type indexes >+ my($testDatabase) = @_; >+ open(FILE, '>dist/index.html') or die "failed to open output file: $!"; >+ local $" = ', '; >+ # XXX Hardcoded to say Selectors >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>CSS3 Selectors Test Suite Index</title> >+ </head> >+ <body> >+ <h1><a href="http://www.w3.org/"><img src="http://www.w3.org/Icons/WWW/w3c_home" alt="W3C" width="72" height="48"></a> CSS3 Selectors Test Suite Index</h1> >+ <p>The tests are available in several variants.</p> >+ <ul>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape("$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a></li>'; >+ } >+ # XXX Most of the following should be stored in a config file or something >+ print FILE ' >+ </ul> >+ <p>A list of recent changes may be found in the <a >+ href="CHANGES">CHANGES</a> file.</p> >+ <h2>The Role Of This Test Suite</h2> >+ >+ <p>The role of this test is primarily to help implementors develop >+ more comprehensive tests and to help authors gauge the level of >+ support for the basics of the Selectors specification.</p> >+ >+ <p>It is also a key part of the Selectors specification exit >+ criteria. For this specification to exit the CR stage, the following >+ conditions shall be met:</p> >+ <ol> >+ <li><p> There must be at least two interoperable implementations for >+ every feature in the Selectors Module.</p> >+ <p>For the purposes of this criterion, we define the following terms:</p> >+ <dl><dt>feature</dt><dd><p>a section or subsection in the Selectors Module.</p></dd> >+ <dt>interoperable</dt><dd><p>passing the respective test case(s) in the >+ Selectors Module test suite, or, if the implementation is not a >+ web browser, an equivalent test. Every relevant test in the test >+ suite should have an equivalent test created if such a UA is to >+ be used to claim interoperability. In addition if such a UA is >+ to be used to claim interoperability, then there must one or >+ more additional UAs which can also pass those equivalent tests >+ in the same way for the purpose of interoperability. The >+ equivalent tests must be made publically available for the >+ purposes of peer review.</p></dd> >+ <dt>implementation</dt><dd><p>a user agent which:</p> >+ <ol> >+ <li>implements the feature.</li> >+ <li>is available (i.e. publicly downloadable or available >+ through some other public point of sale mechanism). This is >+ the "show me" requirement.</li> >+ <li>is shipping (i.e. development, private or unofficial >+ versions are insufficient).</li> >+ <li>is not experimental (i.e. is intended for a wide audience >+ and could be used on a daily basis.)</li></ol></dd></dl> >+ <li><p>A minimum of six months of the CR period must have elapsed. >+ This is to ensure that enough time is given for any remaining >+ major errors to be caught.</p> >+ </li></ol> >+ >+ <h2>Contributors</h2> >+ <p>The authors of the test suite are '; >+ my %authors; >+ foreach my $test (values(%$testDatabase)) { >+ foreach my $author (@{$test->{'author'}}) { >+ $authors{$author}++; >+ } >+ } >+ my @authors = sort(keys(%authors)); >+ foreach my $index (0..$#authors) { >+ if ($index > 0) { >+ if ($index eq $#authors) { >+ print FILE ' and '; >+ } else { >+ print FILE ', '; >+ } >+ } >+ print FILE $authors[$index]; >+ } >+ print FILE '.</p> >+ <p class=copyright><a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Copyright">Copyright</a> ©2001 <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup> (<a href="http://www.lcs.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>, <a href="http://www.inria.fr/"><abbr lang=fr title="Institut National de Recherche en Informatique et Automatique">INRIA</abbr></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice-20000612#W3C_Trademarks">trademark</a>, <a href="http://www.w3.org/Consortium/Legal/copyright-documents-19990405">document use</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">software licensing</a> rules apply.</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+sub generateSubIndex { # points to mini test index and all indexes for this test type >+ my($destinationType, $testList, $testDatabase) = @_; >+ open(FILE, ">dist/$destinationType/index.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Test Index</title> >+ <link rel="top" href="../index.html"> >+ </head> >+ <body> >+ <h1>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Test Index</h1> >+ <p>The '.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' tests are available in several variants.</p> >+ <h2>Tests With Navigation Aids</h2> >+ <p>Each category of test is available using several different harnesses. The name of the harness describes how the test markup is contained within it, for example the Xlink embed case uses an XLink with the show axis set to embed.</p> >+ <ul>'; >+ foreach my $category (split ' ', $utils::helpers::types{'TEST_TYPES'}) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape($category).'/index.html" title="'.&utils::helpers::escape($utils::helpers::TestTypeDescriptions{$category}).'">'.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$category}).'</a>: '; >+ print FILE '<a href="'.&utils::helpers::escape("$category/flat/index.html").'">Self Contained</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'SHELL_TYPES'}) { >+ print FILE ', <a href="'.&utils::helpers::escape("$category/$type/index.html").'" title="'.&utils::helpers::escape($utils::helpers::ShellTypeDescriptions{$type}).'">'.&utils::helpers::escape($utils::helpers::ShellTypeTitles{$type}).'</a>'; >+ } >+ print FILE '</li>'; >+ } >+ print FILE ' >+ </ul> >+ <h2>Unadorned Tests</h2> >+ <ul>'; >+ foreach my $test (@$testList) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape("tests/$test.".&extensions($destinationType)).'">'.&utils::helpers::escape($testDatabase->{$test}->{'def'})."</a> (#".&utils::helpers::escape($testDatabase->{$test}->{'number'}).")</li>"; >+ } >+ print FILE ' >+ </ul> >+ <p>See also: <a href="../index.html">Index</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ if ($type ne $destinationType) { >+ print FILE ', <a href="'.&utils::helpers::escape("../$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a>'; >+ } >+ } >+ print FILE '</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+sub generateMiniTestIndex { # points to all mini tests >+ my($destinationType, $testList, $testDatabase) = @_; >+ open(FILE, ">dist/$destinationType/tests/index.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Unadorned Test Index</title> >+ <link rel="up" href="../index.html"> >+ <link rel="top" href="../../index.html"> >+ </head> >+ <body> >+ <h1>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Unadorned Test Index</h1> >+ <ul>'; >+ foreach my $test (@$testList) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape("$test.".&extensions($destinationType)).'">'.&utils::helpers::escape($testDatabase->{$test}->{'def'})."</a> (#".&utils::helpers::escape($testDatabase->{$test}->{'number'}).")</li>"; >+ } >+ print FILE ' >+ </ul> >+ <p>See also: <a href="../../index.html">Index</a>, <a href="../index.html">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Index</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ if ($type ne $destinationType) { >+ print FILE ', <a href="'.&utils::helpers::escape("../../$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a>'; >+ } >+ } >+ print FILE '</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+sub generateTestTypeIndex { # points to flat test index and each shell index >+ my($destinationType, $testType, $testList, $testDatabase) = @_; >+ open(FILE, ">dist/$destinationType/$testType/index.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</title> >+ <link rel="up" href="../index.html"> >+ <link rel="top" href="../../index.html"> >+ </head> >+ <body> >+ <h1>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</h1> >+ <p>'.&utils::helpers::escape($utils::helpers::TestTypeDescriptions{$testType}).'</p> >+ <p>Please select the type of test harness you wish to use to embed the tests inside the navigation aids:</p> >+ <dl> >+ <dt><a href="'.&utils::helpers::escape("flat/index.html").'">Self Contained</a></dt> >+ <dd>Tests consist of an '.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' page describing the test and containing, inline, the test content.</dd>'; >+ foreach my $type (split ' ', $utils::helpers::types{'SHELL_TYPES'}) { >+ print FILE "\n <dt><a href=\"".&utils::helpers::escape("$type/index.html").'">'.&utils::helpers::escape($utils::helpers::ShellTypeTitles{$type}).'</a></dt> >+ <dd>'.&utils::helpers::escape($utils::helpers::ShellTypeDescriptions{$type}).'</dd>'; >+ } >+ print FILE ' >+ </dl> >+ <p>See also: <a href="../../index.html">Index</a>, <a href="../index.html">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Index</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ if ($type ne $destinationType) { >+ print FILE ', <a href="'.&utils::helpers::escape("../../../$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a>'; >+ } >+ } >+ print FILE '</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+sub generateFlatTestIndex { # points to flat tests >+ my($destinationType, $testType, $testList, $testDatabase) = @_; >+ open(FILE, ">dist/$destinationType/$testType/flat/index.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Self Contained '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</title> >+ <link rel="up" href="../index.html"> >+ <link rel="top" href="../../../index.html"> >+ </head> >+ <body> >+ <h1>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Self Contained '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</h1> >+ <ul>'; >+ foreach my $test (@$testList) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape("$test.".&extensions($destinationType)).'">'.&utils::helpers::escape($testDatabase->{$test}->{'def'})."</a> (#".&utils::helpers::escape($testDatabase->{$test}->{'number'}).")</li>"; >+ } >+ print FILE ' >+ </ul> >+ <p>See also: <a href="../../../index.html">Index</a>, <a href="../../index.html">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Index</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ if ($type ne $destinationType) { >+ print FILE ', <a href="'.&utils::helpers::escape("../../../$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a>'; >+ } >+ } >+ print FILE '</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+sub generateShellTestIndex { # points to shell tests >+ my($destinationType, $testType, $shellType, $testList, $testDatabase) = @_; >+ open(FILE, ">dist/$destinationType/$testType/$shellType/index.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' '.&utils::helpers::escape($utils::helpers::ShellTypeTitles{$shellType}).' '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</title> >+ <link rel="up" href="../index.html"> >+ <link rel="top" href="../../../index.html"> >+ </head> >+ <body> >+ <h1>'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' '.&utils::helpers::escape($utils::helpers::ShellTypeTitles{$shellType}).' '.&utils::helpers::escape($utils::helpers::TestTypeShortTitles{$testType}).' Index</h1> >+ <p>'.&utils::helpers::escape($utils::helpers::ShellTypeDescriptions{$shellType}).'</p> >+ <ul>'; >+ foreach my $test (@$testList) { >+ print FILE "\n <li><a href=\"".&utils::helpers::escape("$test.".&extensions($shellType)).'">'.&utils::helpers::escape($testDatabase->{$test}->{'def'})."</a> (#".&utils::helpers::escape($testDatabase->{$test}->{'number'}).")</li>"; >+ } >+ print FILE ' >+ </ul> >+ <p>See also: <a href="../../../index.html">Index</a>, <a href="../../index.html">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$destinationType}).' Index</a>'; >+ foreach my $type (split ' ', $utils::helpers::types{'DESTINATION_TYPES'}) { >+ if ($type ne $destinationType) { >+ print FILE ', <a href="'.&utils::helpers::escape("../../../$type/index.html").'">'.&utils::helpers::escape($utils::helpers::DestinationTypeTitles{$type}).'</a>'; >+ } >+ } >+ print FILE '</p> >+ </body> >+</html>'; >+ close(FILE); >+} >+ >+ >+############################################################################## >+# Test Meta Generators # >+############################################################################## >+ >+sub generateMiniTest { >+ my($destinationType, $tests, $testDatabase, $testIndex) = @_; >+ my $func = UNIVERSAL::can(__PACKAGE__, "print_mini_${destinationType}"); >+ if (defined($func)) { >+ &$func($tests, $testDatabase, $testIndex); >+ } else { >+ die("No generator defined for mini $destinationType tests. Aborted while processing test $tests->[$testIndex]"); >+ } >+} >+ >+sub generateFlatTest { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $func = UNIVERSAL::can(__PACKAGE__, "print_flat_${destinationType}"); >+ if (defined($func)) { >+ &$func($testType, $tests, $testDatabase, $testIndex); >+ } else { >+ die("No generator defined for full $destinationType tests. Aborted while processing test $tests->[$testIndex]"); >+ } >+} >+ >+sub generateShell { >+ my($destinationType, $testType, $shellType, $tests, $testDatabase, $testIndex) = @_; >+ my $func = UNIVERSAL::can(__PACKAGE__, "print_shell_${shellType}"); >+ if (defined($func)) { >+ &$func($destinationType, $testType, $tests, $testDatabase, $testIndex); >+ } else { >+ die("No generator defined for $shellType shells of $destinationType tests. Aborted while processing test $tests->[$testIndex]"); >+ } >+} >+ >+ >+############################################################################## >+# Test Generators # >+############################################################################## >+ >+sub print_mini_xhtml { >+ my($tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/xhtml/tests/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" unless defined($data->{'namespaced'}); >+ print FILE '<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <style type="text/css"><![CDATA['."$data->{cssrules}]]></style>"; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'"/>'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'"/>'; >+ } >+ # XXX shoud list alternates (i.e. flat and each shell) >+ print FILE " >+ <link rel=\"up\" href=\"./index.html\"/> >+ <link rel=\"top\" href=\"../../index.html\"/> >+ </head> >+ <body$data->{'namespaces'}>$data->{'code-xhtml'}</body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_mini_html { >+ my($tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/html/tests/$name.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <style type="text/css">'."$data->{cssrules}</style>"; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'">'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'">'; >+ } >+ # XXX shoud list alternates (i.e. flat and each shell) >+ print FILE " >+ <link rel=\"up\" href=\"./index.html\"> >+ <link rel=\"top\" href=\"../../index.html\"> >+ </head> >+ <body>$data->{'code-html'}</body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_mini_xml { >+ my($tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/xml/tests/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="'.&utils::helpers::escape($name).".css\" type=\"text/css\"?> >+<test$data->{'namespaces'}>$data->{'code-xml'}</test>"; >+ close(FILE); >+ open(FILE, ">dist/xml/tests/$name.css") or die "failed to open output file: $!"; >+ print FILE $data->{cssrules}; >+ close(FILE); >+} >+ >+ >+sub print_flat_xhtml { >+ my($testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/xhtml/$testType/flat/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE "<?xml-stylesheet href=\"../../../style/xhtml-full.css\" type=\"text/css\"?>\n"; >+ print FILE "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" unless defined($data->{'namespaced'}); >+ print FILE '<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/> >+ <link rel="stylesheet" type="text/css" href="../../../style/xhtml-full.css"/> <!-- yes this means compliant UAs get to import this twice --> >+ <style type="text/css"><![CDATA['."$data->{cssrules}]]></style>"; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'"/>'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'"/>'; >+ } >+ # XXX shoud list alternates (i.e. mini and each shell) >+ print FILE ' >+ <link rel="up" href="./index.html"/> >+ <link rel="top" href="../../../index.html"/> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ print FILE " >+ <div class=\"testSource\"> >+ <div class=\"testText\"$data->{'namespaces'}>$data->{'code-xhtml'}</div> >+ <pre class=\"rules\">$data->{'escapedcode-css'}</pre> >+ <pre class=\"rules\">$data->{'escapedcode-xhtml'}</pre> >+ </div> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_flat_html { >+ my($testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/html/$testType/flat/$name.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"> >+ <link rel="stylesheet" type="text/css" href="../../../style/html-full.css"> >+ <style type="text/css">'."$data->{cssrules}</style>"; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'">'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'">'; >+ } >+ # XXX shoud list alternates (i.e. mini and each shell) >+ print FILE ' >+ <link rel="up" href="./index.html"> >+ <link rel="top" href="../../../index.html"> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'only-xml'})) { >+ die("Inconsistency error: XML-specific test $name passed to HTML test generator"); >+ } >+ print FILE " >+ <div class=\"testSource\"> >+ <div class=\"testText\">$data->{'code-html'}</div> >+ <pre class=\"rules\">$data->{'escapedcode-css'}</pre> >+ <pre class=\"rules\">$data->{'escapedcode-html'}</pre> >+ </div> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_flat_xml { >+ my($testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/xml/$testType/flat/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="../../../style/xml-full.css" type="text/css"?> >+<?xml-stylesheet href="'.&utils::helpers::escape($name).'.css" type="text/css"?> >+<test xmlns:xlink="http://www.w3.org/1999/xlink"> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title>'; >+ foreach my $author (@{$data->{'author'}}) { >+ print FILE "\n <author>".&utils::helpers::escape($author).'</author>'; >+ } >+ print FILE ' >+ <metadata> >+ <item> <name>CSS 3 Module</name> <data>'.&utils::helpers::escape($data->{'module'}).'</data> </item>'; # XXX HARD CODED >+ if ($testIndex < $#$tests) { >+ print FILE "\n <item> <name>Next</name> <data xlink:type=\"simple\" xlink:href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml">'.($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'</data> </item>'; >+ } >+ if ($testIndex > 0) { >+ print FILE "\n <item> <name>Previous</name> <data xlink:type=\"simple\" xlink:href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml">'.($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'</data> </item>'; >+ } >+ print FILE ' >+ <item> <name>Test #</name> <data>'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</data> </item> >+ <item> <name>Testing</name> <data>'.&utils::helpers::escape($data->{'def'}).'</data> </item> >+ <item> <name>ID</name> <data>'.&utils::helpers::escape($data->{'number'}).'</data> </item> >+ <item> <name>Date</name> <data>'.&utils::helpers::escape($data->{'date'}).'</data> </item> >+ <item> <name>Revision</name> <data>'.&utils::helpers::escape($data->{'rev'}).'</data> </item> >+ </metadata>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <requirement>User interaction is required for this test.</requirement>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <requirement>The UA must support the concept of a session history for this test.</requirement>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <requirement>The UA must support ECMA-262 and DOM Level 2 Core for this test.</requirement>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <requirement>The UA must support namespaces for this test.</requirement>"; >+ } >+ print FILE " >+ <content$data->{'namespaces'}>$data->{'code-xml'}</content> >+ <source> >+ <css>$data->{'escapedcode-css'}</css> >+ <xml>$data->{'escapedcode-xml'}</xml> >+ </source> >+</test>"; >+ close(FILE); >+ # XXX we generate one of these for each test file -- >+ # XXX we could put them up one directory, or just use the stylesheets from the mini tests >+ open(FILE, ">dist/xml/$testType/flat/$name.css") or die "failed to open output file: $!"; >+ print FILE $data->{cssrules}; >+ close(FILE); >+} >+ >+ >+sub print_shell_xhtml_iframe { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/xhtml_iframe/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="../../../style/xhtml-shell.css" type="text/css"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/> >+ <link rel="stylesheet" type="text/css" href="../../../style/xhtml-shell.css"/> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'"/>'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'"/>'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html"/> >+ <link rel="top" href="../../../index.html"/> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE " >+ <iframe src=\"../../tests/$name.$extension\"/> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_xhtml_object { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/xhtml_object/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="../../../style/xhtml-shell.css" type="text/css"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/> >+ <link rel="stylesheet" type="text/css" href="../../../style/xhtml-shell.css"/> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'"/>'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'"/>'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html"/> >+ <link rel="top" href="../../../index.html"/> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE " >+ <object data=\"../../tests/$name.$extension\"/> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_xhtml_frames { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ my $topframe = &utils::helpers::escape("$name-top.xml"); >+ my $bottomframe = &utils::helpers::escape("../../tests/$name.$extension"); >+ open(FILE, ">dist/$destinationType/$testType/xhtml_frames/$name-top.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="../../../style/xhtml-shell.css" type="text/css"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/> >+ <link rel="stylesheet" type="text/css" href="../../../style/xhtml-shell.css" target="_top"/> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'" target="_top"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\"/>"; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\"/>"; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'" target="_top"/>'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html" target="_top"/> >+ <link rel="top" href="../../../index.html" target="_top"/> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ print FILE " >+ </body> >+</html>"; >+ close(FILE); >+ open(FILE, ">dist/$destinationType/$testType/xhtml_frames/$name.xml") or die "failed to open output file: $!"; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/>'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'" target="_top"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\"/>"; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\"/>"; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'" target="_top"/>'; >+ } >+ print FILE " >+ <link rel=\"up\" href=\"./index.html\" target=\"_top\"/> >+ <link rel=\"top\" href=\"../../../index.html\" target=\"_top\"/> >+ </head> >+ <frameset rows=\"35%,*\" cols=\"*\"> >+ <frame src=\"$topframe\"/> >+ <frame src=\"$bottomframe\"/> >+ </frameset> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_html_iframe { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/html_iframe/$name.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"> >+ <link rel="stylesheet" type="text/css" href="../../../style/html-shell.css"> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'">'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'">'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html"> >+ <link rel="top" href="../../../index.html"> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE " >+ <iframe src=\"../../tests/$name.$extension\"> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_html_object { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/html_object/$name.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"> >+ <link rel="stylesheet" type="text/css" href="../../../style/html-shell.css">'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'">'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'">'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'">'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html"> >+ <link rel="top" href="../../../index.html"> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE " >+ <object data=\"../../tests/$name.$extension\"></object> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_tng { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/tng/$name.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> >+<HTML> >+<HEAD> >+<TITLE>CSS3 Test Suite: '.&utils::helpers::escape($data->{'def'}).'</TITLE> >+<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> >+<META http-equiv="Content-Style-Type" content="text/css"> >+ >+<LINK rel="stylesheet" type="text/css" media="screen" href="../../../style/tng.css"></HEAD> >+ >+<BODY> >+<DIV class="navigation"> >+<H2>CSS3 Test Suite: '.&utils::helpers::escape($data->{'def'}).'</H2> >+ >+<HR>'; >+ if ($testIndex > 0) { >+ print FILE "\n[<A HREF=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\">Previous</A>]"; >+ } else { >+ print FILE "\n[Previous]"; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE ' <A HREF="'.&utils::helpers::escape($tests->[$testIndex+1]).'.html">[Next]</A>'; >+ } else { >+ print FILE ' <A HREF="../index.html">[Next]</A>'; >+ } >+ print FILE ' <A HREF="index.html">[Contents]</A>'; >+ >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE '<BR>'; >+ >+ if (defined($data->{'interactive'})) { >+ print FILE "\n<P CLASS=\"WARNING\">NOTE: User interaction is required for this test.</P>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n<P CLASS=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</P>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n<P CLASS=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</P>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n<P CLASS=\"WARNING\">NOTE: The UA must support namespaces for this test.</P>"; >+ >+ } >+ print FILE ' >+</DIV> >+<OBJECT height="100%" width="100%" border="0" type="text/html" data="'."../../tests/$name.$extension".'"><A class="navigation" href="'."../../tests/$name.$extension".'" target="testwindow">Test</A></OBJECT> >+</BODY> >+</HTML>'; >+ close(FILE); >+} >+ >+sub print_shell_html_frames { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ my $topframe = &utils::helpers::escape("$name-top.html"); >+ my $bottomframe = &utils::helpers::escape("../../tests/$name.$extension"); >+ open(FILE, ">dist/$destinationType/$testType/html_frames/$name-top.html") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"> >+ <link rel="stylesheet" type="text/css" href="../../../style/html-shell.css" target="_top"> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'" target="_top">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\">"; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\">"; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'" target="_top">'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html" target="_top"> >+ <link rel="top" href="../../../index.html" target="_top"> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ print FILE " >+ </body> >+</html>"; >+ close(FILE); >+ open(FILE, ">dist/$destinationType/$testType/html_frames/$name.html") or die "failed to open output file: $!"; >+ print FILE '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> >+<html> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/>'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'" target="_top">'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\" target=\"_top\">"; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\" target=\"_top\">"; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).".html\" title=\"".&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'" target="_top">'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE " >+ <link rel=\"up\" href=\"./index.html\" target=\"_top\"> >+ <link rel=\"top\" href=\"../../../index.html\" target=\"_top\"> >+ </head> >+ <frameset rows=\"35%,*\" cols=\"*\"> >+ <frame src=\"$topframe\"> >+ <frame src=\"$bottomframe\"> >+ </frameset> >+</html>"; >+ close(FILE); >+} >+ >+sub print_shell_xlink_embed { >+ my($destinationType, $testType, $tests, $testDatabase, $testIndex) = @_; >+ my $name = $tests->[$testIndex]; >+ my $data = $testDatabase->{$tests->[$testIndex]}; >+ open(FILE, ">dist/$destinationType/$testType/xlink_embed/$name.xml") or die "failed to open output file: $!"; >+ local $" = ', '; >+ print FILE '<?xml-stylesheet href="../../../style/xhtml-shell.css" type="text/css"?> >+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> >+<html xmlns="http://www.w3.org/1999/xhtml"> >+ <head> >+ <title>'.&utils::helpers::escape($data->{'def'}).'</title> >+ <meta name="author" content="'.&utils::helpers::escape("@{$data->{'author'}}").'"/> >+ <link rel="stylesheet" type="text/css" href="../../../style/xhtml-shell.css"/> <!-- yes this means compliant UAs get to import this twice -->'; >+ if ($testIndex > 0) { >+ print FILE "\n <link rel=\"first\" href=\"".&utils::helpers::escape($tests->[0]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[0]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"prev\" href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'}).'"/>'; >+ } >+ if ($testIndex < $#$tests) { >+ print FILE "\n <link rel=\"next\" href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'}).'"/>'; >+ print FILE "\n <link rel=\"last\" href=\"".&utils::helpers::escape($tests->[$#$tests]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$#$tests]}->{'def'}).'"/>'; >+ } >+ # XXX shoud list alternates (i.e. mini, flat and the other shells) >+ print FILE ' >+ <link rel="up" href="./index.html"/> >+ <link rel="top" href="../../../index.html"/> >+ </head> >+ <body> >+ <table class="testDescription"> >+ <tr> >+ <th class="b">CSS 3 Module</th> <!-- XXX hard coded to say CSS 3 --> >+ <th class="c" colspan="2">'; >+ if ($testIndex > 0) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex-1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex-1]}->{'def'})."\"><==</a>"; >+ } else { >+ print FILE "\n <=="; >+ } >+ print FILE "\n Test #"; >+ if ($testIndex < $#$tests) { >+ print FILE "\n <a href=\"".&utils::helpers::escape($tests->[$testIndex+1]).'.xml" title="'.&utils::helpers::escape($testDatabase->{$tests->[$testIndex+1]}->{'def'})."\">==></a>"; >+ } else { >+ print FILE "\n ==>"; >+ } >+ print FILE ' >+ </th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'module'}).'</td> >+ <td class="c" colspan="2">'.($testIndex+1).' of '.(scalar(@$tests)); >+ if ($utils::helpers::TestTypeTitles{$testType} ne '') { >+ print FILE ' of the '.&utils::helpers::escape($utils::helpers::TestTypeTitles{$testType}); >+ } >+ print FILE '</td> >+ </tr> >+ <tr> >+ <th class="b">Testing</th> >+ <th class="a">Date</th> >+ <th class="a">Revision</th> >+ </tr> >+ <tr> >+ <td class="b">'.&utils::helpers::escape($data->{'def'}).' (ID #'.&utils::helpers::escape($data->{'number'}).')</td> >+ <td class="a">'.&utils::helpers::escape($data->{'date'}).'</td> >+ <td class="a">'.&utils::helpers::escape($data->{'rev'}).'</td> >+ </tr> >+ </table>'; >+ if (defined($data->{'interactive'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: User interaction is required for this test.</p>"; >+ } >+ if (defined($data->{'historyneeded'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support the concept of a session history for this test.</p>"; >+ } >+ if (defined($data->{'dynamic'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support ECMA-262 and DOM Level 2 Core for this test.</p>"; >+ } >+ if (defined($data->{'namespaced'})) { >+ print FILE "\n <p class=\"WARNING\">NOTE: The UA must support namespaces for this test.</p>"; >+ } >+ my $extension = &extensions($destinationType); # having the extension in the filename is so wrong... >+ print FILE " >+ <div xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:type=\"simple\" xlink:show=\"embed\" xlink:href=\"../../../tests/$name.$extension\"/> >+ </body> >+</html>"; >+ close(FILE); >+} >+ >+############################################################################## >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/helpers.pm b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/helpers.pm >new file mode 100644 >index 0000000000000000000000000000000000000000..30c35d3425a07eed916f09db972a5743c8aa94e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/helpers.pm >@@ -0,0 +1,219 @@ >+package utils::helpers; >+use Data::Dumper; # DEPENDENCY >+use strict; >+ >+# The Test Type Hash >+# Note: Adding types to this hash is not enough... you also have to >+# add code to the Makefile, the parser, the shortlist functions in >+# this file, and the generators in the generator.pm module. >+%utils::helpers::types = ( >+ 'DESTINATION_TYPES' => 'xhtml html xml', # explicitly listed in Makefile, shortlister and generator >+ 'SHELL_TYPES' => 'xhtml_iframe xhtml_object xhtml_frames html_iframe html_object html_frames xlink_embed tng', # explicitly listed in generator and just below >+ 'TEST_TYPES' => 'full static history interactive', # explicitly listed in shortlister, generator, and just below >+ 'TEST_TYPES' => 'full static history interactive dynamic', # explicitly listed in shortlister, generator, and just below >+ ); >+ >+%utils::helpers::DestinationTypeTitles = ( >+ 'xhtml' => 'XHTML', >+ 'html' => 'HTML', >+ 'xml' => 'XML', >+ ); >+ >+%utils::helpers::ShellTypeTitles = ( >+ 'xhtml_iframe' => 'XHTML <iframe>', >+ 'xhtml_object' => 'XHTML <object>', >+ 'xhtml_frames' => 'XHTML <frame>', >+ 'html_iframe' => 'HTML <iframe>', >+ 'html_object' => 'HTML <object>', >+ 'html_frames' => 'HTML <frame>', >+ 'xlink_embed' => 'XLink embed', >+ 'tng' => 'TNG Format', >+ ); >+ >+%utils::helpers::ShellTypeDescriptions = ( >+ 'xhtml_iframe' => 'Tests consist of an XHTML wrapper page summarising the test and linking to the actual test content using an <iframe> element.', >+ 'xhtml_object' => 'Tests consist of an XHTML wrapper page summarising the test and linking to the actual test content using an <object> element.', >+ 'xhtml_frames' => 'Tests consist of a two frame XHTML frameset, the top frame being an XHTML wrapper page summarising the test and the bottom frame being the actual test content.', >+ 'html_iframe' => 'Tests consist of an HTML wrapper page summarising the test and linking to the actual test content using an <iframe> element.', >+ 'html_object' => 'Tests consist of an HTML wrapper page summarising the test and linking to the actual test content using an <object> element.', >+ 'html_frames' => 'Tests consist of a two frame HTML frameset, the top frame being an HTML wrapper page summarising the test and the bottom frame being the actual test content.', >+ 'xlink_embed' => 'Tests consist of an XML page summarising the test and linking to the actual test content using an XLink with the show axis set to embed.', >+ 'tng' => 'Tests consist of an HTML page with a brief test summary and navigation aids and a link to the test content using an <object> tag. This test format is designed to be stylistically compatible with the TNG test format used for other CSS test suites.', >+ ); >+ >+%utils::helpers::TestTypeTitles = ( >+ 'full' => '', >+ 'static' => 'static tests category', >+ 'history' => 'history-related tests category', >+ 'interactive' => 'interactive tests category', >+ 'dynamic' => 'dynamic tests category', >+ ); >+ >+%utils::helpers::TestTypeDescriptions = ( >+ 'full' => 'The complete set of tests.', >+ 'static' => 'The list of static tests (those that involve in scripting and no user interaction).', >+ 'history' => 'Tests requiring that the UA have some sort of session history.', >+ 'interactive' => 'The tests that require user interaction.', >+ 'dynamic' => 'Pages consisting of a script that dynamically modifies the document in order to complete the test.', >+ ); >+ >+%utils::helpers::TestTypeShortTitles = ( >+ 'full' => 'full', >+ 'static' => 'static', >+ 'history' => 'history-related', >+ 'interactive' => 'interactive', >+ 'dynamic' => 'dynamic', >+ ); >+ >+sub qualifyStartTag { >+ my($parser, $localTagName, @localAttributes) = @_; >+ >+ # get the qualified tag name >+ my $qualifiedTagName; >+ my $namespace = $parser->namespace($localTagName); >+ if (defined($namespace)) { >+ $qualifiedTagName = "{$namespace}$localTagName"; >+ } else { >+ $qualifiedTagName = $localTagName; >+ } >+ >+ # get the qualified attributes >+ my @qualifiedAttributes; >+ my $isName = 1; >+ foreach my $attribute (@localAttributes) { >+ if ($isName) { >+ $namespace = $parser->namespace($attribute); >+ if (defined($namespace)) { >+ push(@qualifiedAttributes, "{$namespace}$attribute"); >+ } else { >+ push(@qualifiedAttributes, $attribute); >+ } >+ } else { >+ #my $data = $attribute; >+ #if ($data =~ s/^([^:]+)://o) { >+ # $namespace = $parser->expand_ns_prefix($1); >+ #} else { >+ # $namespace = $parser->expand_ns_prefix('#default'); >+ #} >+ #if (defined($namespace)) { >+ # push(@qualifiedAttributes, "{$namespace}$data"); # value >+ #} else { >+ push(@qualifiedAttributes, $attribute); # value >+ #} >+ } >+ $isName = not $isName; >+ } >+ >+ # add the namespace declarations >+ foreach my $prefix ($parser->new_ns_prefixes) { >+ if ($prefix eq '#default') { >+ push(@qualifiedAttributes, 'xmlns', $parser->expand_ns_prefix($prefix)); >+ } else { >+ push(@qualifiedAttributes, "xmlns:$prefix", $parser->expand_ns_prefix($prefix)); >+ } >+ } >+ >+ # return it all >+ return ($qualifiedTagName, @qualifiedAttributes); >+} >+ >+sub matchContext { >+ my($parser, $match, $loose) = @_; >+ my @context = $parser->context; >+ if (defined($loose)) { >+ return 0 unless (scalar(@context) >= scalar(@$match)); >+ } else { >+ return 0 unless (scalar(@context) == scalar(@$match)); >+ } >+ foreach my $element (@context[0..$#$match]) { >+ my($namespace, $tagName) = @{shift(@$match)}; >+ return 0 unless ($element eq $tagName); >+ my $matchNamespace = $parser->namespace($element); >+ return 0 unless ((defined($matchNamespace) == defined($namespace)) and >+ ($matchNamespace eq $namespace)); >+ } >+ return 1; >+} >+ >+sub shortlistTestsForDestination { >+ my($type, $testList, $tests) = @_; >+ my @result; >+ foreach my $test (@$testList) { >+ if (exists($tests->{$test})) { >+ if ($type eq 'xhtml') { >+ push(@result, $test); >+ } elsif ($type eq 'xml') { >+ push(@result, $test); >+ } elsif ($type eq 'html') { >+ if (not $tests->{$test}->{'only-xml'}) { >+ push(@result, $test); >+ } >+ } else { >+ die("Don't know how to shortlist tests for $type"); >+ } >+ } >+ } >+ return @result; >+} >+ >+sub shortlistTestsForTypes { >+ my($type, $testList, $tests) = @_; >+ my @result; >+ foreach my $test (@$testList) { >+ if (exists($tests->{$test})) { >+ if ($type eq 'full') { >+ push(@result, $test); >+ } elsif ($type eq 'static') { >+ if (not ($tests->{$test}->{'dynamic'} or $tests->{$test}->{'interactive'})) { >+ push(@result, $test); >+ } >+ } elsif ($type eq 'history') { >+ if ($tests->{$test}->{'historyneeded'}) { >+ push(@result, $test); >+ } >+ } elsif ($type eq 'interactive') { >+ if ($tests->{$test}->{'interactive'}) { >+ push(@result, $test); >+ } >+ } elsif ($type eq 'dynamic') { >+ if ($tests->{$test}->{'dynamic'}) { >+ push(@result, $test); >+ } >+ } else { >+ die("Don't know how to shortlist $type tests"); >+ } >+ } >+ } >+ return @result; >+} >+ >+sub readCache { >+ open(CACHE, '<cache') or return {}; >+ local $/ = undef; >+ my $data = <CACHE>; >+ close(CACHE); >+ if ($data) { >+ return eval $data; >+ } else { >+ return {}; >+ } >+} >+ >+sub writeCache { >+ open(CACHE, '>cache'); >+ print CACHE Data::Dumper->new([@_])->Purity(1)->Terse(1)->Indent(0)->Dump; >+ close(CACHE); >+} >+ >+sub escape { >+ $_ = shift; >+ # because XML::Parser::Expat::escape() doesn't correctly escape "]]>"... >+ s/&/&/go; >+ s/</</go; >+ s/>/>/go; >+ s/"/"/go; #"; # (reset fontlock) >+ s/'/'/go; #'; # (reset fontlock) # note -- this would be apos but apos is not in HTML 4.01 >+ return $_; >+} >+ >+############################################################################## >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/parser.pm b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/parser.pm >new file mode 100644 >index 0000000000000000000000000000000000000000..5ae4a740ed8b61f0c78c9c52551ed62969fe6a03 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/parser.pm >@@ -0,0 +1,334 @@ >+############################################################################## >+# the processor # >+############################################################################## >+ >+# This code is a mess and has numerous subtle bugs in its namespace >+# handling. Do not expect it to pass any tests of its own. >+ >+package utils::parser; >+use utils::helpers; >+use strict; >+ >+my $NAMESPACE = 'http://www.example.org/css3tests'; >+my %months = ( >+ 'january' => 1, >+ 'february' => 2, >+ 'march' => 3, >+ 'april' => 4, >+ 'may' => 5, >+ 'june' => 6, >+ 'july' => 7, >+ 'august' => 8, >+ 'september' => 9, >+ 'october' => 10, >+ 'november' => 11, >+ 'december' => 12, >+ ); >+ >+sub Init { >+ my $parser = shift; >+ $parser->{'Walker Data'} = {}; >+} >+ >+# This is the big workhorse -- it gets called for each start tag. >+sub Start { >+ my $parser = shift; >+ my($tagName, @attrs) = @_; >+ my @context = $parser->context; >+ my($qualifiedTagName, @qualifiedAttrs) = &utils::helpers::qualifyStartTag($parser, $tagName, @attrs); >+ my %qualifiedAttrs = (@qualifiedAttrs); >+ >+ # The root element >+ if ((scalar(@context) == 0) and ($qualifiedTagName eq "{$NAMESPACE}csstest")) { >+ foreach my $name (qw(def module modulename number rev)) { >+ if (defined($qualifiedAttrs{$name})) { >+ $parser->{'Walker Data'}->{$name} = $qualifiedAttrs{$name}; >+ } >+ } >+ if (defined($qualifiedAttrs{date})) { >+ my $date = $qualifiedAttrs{date}; >+ $date =~ s/(.+)-(.+)-(.+)/sprintf('%02d-%02d-%02d', $3, $months{$2}, $1)/gose; >+ $parser->{'Walker Data'}->{date} = $date; >+ } >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}author")) { >+ if (defined($parser->{'Walker Data'}->{'author'})) { >+ push(@{$parser->{'Walker Data'}->{'author'}}, ''); >+ } else { >+ $parser->{'Walker Data'}->{'author'} = ['']; >+ } >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}cssrules")) { >+ # ok >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}userinteraction")) { >+ $parser->{'Walker Data'}->{'interactive'} = 1; >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}dynamic")) { >+ $parser->{'Walker Data'}->{'dynamic'} = 1; >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}historyneeded")) { >+ $parser->{'Walker Data'}->{'historyneeded'} = 1; >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest']]) and >+ ($qualifiedTagName eq "{$NAMESPACE}code") and >+ (not defined($parser->{'Walker Data'}->{'prefixes'}))) { >+ # here we must begin to take stuff into account >+ $parser->{'Walker Data'}->{'code-xml'} = ''; >+ $parser->{'Walker Data'}->{'code-xhtml'} = ''; >+ $parser->{'Walker Data'}->{'code-html'} = ''; >+ # first, all the namespace prefixes in scope >+ $parser->{'Walker Data'}->{'prefixes'} = {}; >+ $parser->{'Walker Data'}->{'prefixesUsed'} = {}; >+ foreach my $prefix ($parser->current_ns_prefixes) { >+ if ($prefix ne '#default') { >+ $parser->{'Walker Data'}->{'prefixes'}->{$prefix} = $parser->expand_ns_prefix($prefix); >+ $parser->{'Walker Data'}->{'prefixesUsed'}->{$prefix} = 0; >+ } >+ } >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest'], >+ [$NAMESPACE, 'code']])) { # child of code element >+ $parser->xpcroak('restrict cannot be a child of code') if $qualifiedTagName eq "{$NAMESPACE}restrict"; >+ &processElement($parser, $tagName, 1, @attrs); >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest'], >+ [$NAMESPACE, 'code']], 1) and >+ ($qualifiedTagName eq "{$NAMESPACE}restrict")) { # <restrict>, descendant of code element (must not be child) >+ if (defined($parser->{'Walker Data'}->{'restrict'})) { >+ $parser->xpcroak('<restrict> may not be nested'); >+ } >+ if (defined($qualifiedAttrs{'for'})) { >+ $parser->{'Walker Data'}->{'restrict'} = $qualifiedAttrs{'for'}; >+ } else { >+ $parser->xpcroak('required attribute \'for\' missing'); >+ } >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest'], >+ [$NAMESPACE, 'code']], 1)) { # descendant of code element >+ &processElement($parser, $tagName, 0, @attrs); >+ } else { >+ $parser->xpcroak("unexpected element $tagName in namespace ".$parser->namespace($tagName)); >+ } >+} >+ >+sub CdataStart { >+ my $parser = shift; >+ if (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'code']], 1)) { >+ $parser->{'Walker Data'}->{'code-xml'} .= '<![CDATA[' if applicable($parser, 'xml'); >+ $parser->{'Walker Data'}->{'code-xhtml'} .= '<![CDATA[' if applicable($parser, 'xhtml'); >+ # $parser->{'Walker Data'}->{'code-html'} .= '' if applicable($parser, 'html'); # HTML has no CDATA blocks >+ $parser->{'Walker Data'}->{'cdata'} = 1; >+ } else { >+ # not technically invalid... >+ } >+} >+ >+sub CdataEnd { >+ my $parser = shift; >+ if (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'code']], 1)) { >+ $parser->{'Walker Data'}->{'code-xml'} .= ']]>' if applicable($parser, 'xml'); >+ $parser->{'Walker Data'}->{'code-xhtml'} .= ']]>' if applicable($parser, 'xhtml'); >+ # $parser->{'Walker Data'}->{'code-html'} .= '' if applicable($parser, 'html'); # HTML has no CDATA blocks >+ $parser->{'Walker Data'}->{'cdata'} = 0; >+ } else { >+ # not technically invalid... >+ } >+} >+ >+sub Comment { >+ my $parser = shift; >+ my($comment) = @_; >+ if (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'code']], 1)) { >+ $parser->{'Walker Data'}->{'code-xml'} .= "<!--$comment-->" if applicable($parser, 'xml'); >+ $parser->{'Walker Data'}->{'code-xhtml'} .= "<!--$comment-->" if applicable($parser, 'xhtml'); >+ $parser->{'Walker Data'}->{'code-html'} .= "<!--$comment-->" if applicable($parser, 'html'); >+ } else { >+ # not technically invalid... >+ } >+} >+ >+sub Proc { >+ my $parser = shift; >+ my($target, $data) = @_; >+ if (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'code']], 1)) { >+ $parser->{'Walker Data'}->{'code-xml'} .= "<?$target $data?>" if applicable($parser, 'xml'); >+ $parser->{'Walker Data'}->{'code-xhtml'} .= "<?$target $data?>" if applicable($parser, 'xhtml'); >+ $parser->{'Walker Data'}->{'code-html'} .= "<?$target $data>" if applicable($parser, 'html'); >+ } else { >+ # not technically invalid... >+ } >+} >+ >+# This is called for each line of a string of text (as well as the contents of any CDATA blocks, etc) >+sub Char { >+ my $parser = shift; >+ my($text) = @_; >+ if (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'author']])) { >+ $parser->{'Walker Data'}->{'author'}->[$#{$parser->{'Walker Data'}->{'author'}}] .= $text; >+ } elsif (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'cssrules']])) { >+ $parser->{'Walker Data'}->{'cssrules'} .= $text; >+ } elsif (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest']]) and ($text =~ /^\s+$/os)) { >+ # ok >+ } elsif (&utils::helpers::matchContext($parser, [ >+ [$NAMESPACE, 'csstest'], [$NAMESPACE, 'code']], 1)) { >+ if (not $parser->{'Walker Data'}->{'cdata'}) { >+ $text = &utils::helpers::escape($text); >+ } >+ $parser->{'Walker Data'}->{'code-xml'} .= $text if applicable($parser, 'xml'); >+ $parser->{'Walker Data'}->{'code-xhtml'} .= $text if applicable($parser, 'xhtml'); >+ $parser->{'Walker Data'}->{'code-html'} .= $text if applicable($parser, 'html'); >+ } else { >+ $parser->xpcroak("found unexpected text"); >+ } >+} >+ >+sub End { >+ my $parser = shift; >+ my($tagName) = @_; >+ if (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest'], >+ [$NAMESPACE, 'code']], 1) and >+ (($tagName eq 'restrict') and ($parser->namespace($tagName) eq $NAMESPACE))) { # <restrict>, descendant of code element >+ delete($parser->{'Walker Data'}->{'restrict'}); >+ } elsif (&utils::helpers::matchContext($parser, [[$NAMESPACE, 'csstest'], >+ [$NAMESPACE, 'code']], 1)) { >+ if ($parser->recognized_string ne '') { >+ $parser->{'Walker Data'}->{'endTag'} = $parser->recognized_string; >+ } else { >+ # This was an empty tag with the short form <foo/>. This >+ # guarentees that the element can have no children, so we >+ # don't need to ensure the endTag bit is propagated >+ # correctly across children. >+ } >+ # XML output >+ $parser->{'Walker Data'}->{'code-xml'} .= $parser->{'Walker Data'}->{'endTag'} if applicable($parser, 'xml'); >+ # XHTML output >+ $parser->{'Walker Data'}->{'code-xhtml'} .= $parser->{'Walker Data'}->{'endTag'} if applicable($parser, 'xhtml'); >+ # HTML output >+ if (($parser->{'Walker Data'}->{'endTag'} ne '</input>') and >+ ($parser->{'Walker Data'}->{'endTag'} ne '</br>')) { >+ $parser->{'Walker Data'}->{'code-html'} .= $parser->{'Walker Data'}->{'endTag'} if applicable($parser, 'html'); >+ } # else HTML doesn't allow end tags for those >+ } else { >+ # ok >+ } >+} >+ >+sub Final { >+ my $parser = shift; >+ my $data = $parser->{'Walker Data'}; >+ $data->{'escapedcode-xml'} = &utils::helpers::escape($data->{'code-xml'}); >+ $data->{'escapedcode-xhtml'} = &utils::helpers::escape($data->{'code-xhtml'}); >+ $data->{'escapedcode-html'} = &utils::helpers::escape($data->{'code-html'}); >+ $data->{'escapedcode-css'} = &utils::helpers::escape($data->{'cssrules'}); >+ $data->{'namespaces'} = ''; >+ foreach my $prefix (keys %{$data->{'prefixes'}}) { >+ if ($data->{'prefixesUsed'}->{$prefix}) { >+ $data->{'namespaces'} .= " xmlns:${prefix}=\"$data->{'prefixes'}->{$prefix}\""; >+ } >+ } >+ delete($parser->{'Walker Data'}); >+ return $data; >+} >+ >+sub processElement { >+ my $parser = shift; >+ my($tagName, $child, @attrs) = @_; >+ # $child is true if the element should declare its own default namespace if needed >+ # (i.e. if element is a direct child of the <code> element) >+ my @prefixes = $parser->current_ns_prefixes; >+ # get the element stuff >+ my $prefix = ''; >+ if ($parser->recognized_string =~ m/<([^\s:]+):/o) { >+ $prefix = $1; >+ } >+ $parser->{'Walker Data'}->{'prefixesUsed'}->{$prefix} += 1 if exists $parser->{'Walker Data'}->{'prefixesUsed'}->{$prefix}; >+ my $default = $parser->expand_ns_prefix('#default'); >+ my $defaultXML = ''; >+ my $defaultXHTML = ''; >+ if ($child) { >+ if (defined($default)) { >+ if ($default ne 'http://www.w3.org/1999/xhtml') { >+ $defaultXHTML = ' xmlns="'.&utils::helpers::escape($default).'"'; >+ } >+ $defaultXML = ' xmlns="'.&utils::helpers::escape($default).'"'; >+ } else { >+ $defaultXHTML = ' xmlns=""'; >+ } >+ } # else handled as part of the new_ns_prefix fixup >+ my $newNamespaces = ''; >+ my $newNamespacePrefixes = {}; >+ foreach my $newPrefix ($parser->new_ns_prefixes) { >+ my $namespace = $parser->expand_ns_prefix($newPrefix); >+ if (not defined($namespace)) { >+ $namespace = ''; >+ } >+ if ($newPrefix ne '#default') { >+ $newNamespaces .= " xmlns:$newPrefix=\"".&utils::helpers::escape($namespace).'"'; >+ $newNamespacePrefixes->{$newPrefix} = $namespace; >+ } elsif (not $child) { >+ $newNamespaces .= ' xmlns="'.&utils::helpers::escape($namespace).'"'; >+ } >+ } >+ my %prefixLookup = map { if ($_ ne '#default') { $parser->expand_ns_prefix($_) => $_ } else { (); } } @prefixes; >+ my $attributes = ''; >+ my $isName = 1; >+ foreach my $attribute (@attrs) { >+ if ($isName) { >+ # we currently lose the actual prefix used and look it back up... this can be wrong if >+ # there are multiple prefixes defined for the same namespace. >+ my $attrNamespace; >+ if ($attribute =~ s/^\|//o) { >+ # this handles a bug in XML::Parser::Expat with attributes of the form: >+ # <element xmlns="" xmlns:none="" none:this="will be called '|this' and not 'this' in $attribute" /> >+ # XXX actually the bug is that that doesn't throw a well-formedness exception XXX >+ $attrNamespace = ''; >+ } else { >+ $attrNamespace = $parser->namespace($attribute); >+ } >+ my $attrPrefix; >+ if (defined($attrNamespace)) { >+ $parser->{'Walker Data'}->{'namespaced'} = 1; >+ $parser->{'Walker Data'}->{'only-xml'} = 1 if applicable($parser, 'html'); >+ if ($attrNamespace eq 'http://www.w3.org/XML/1998/namespace') { >+ $attrPrefix = 'xml'; >+ } else { >+ $attrPrefix = $prefixLookup{$attrNamespace}; >+ $parser->{'Walker Data'}->{'prefixesUsed'}->{$attrPrefix} += 1 if exists $parser->{'Walker Data'}->{'prefixesUsed'}->{$attrPrefix}; >+ } >+ $attrPrefix .= ':'; >+ } else { >+ $attrPrefix = ''; >+ } >+ $attributes .= " $attrPrefix$attribute=\""; >+ } else { >+ $attributes .= &utils::helpers::escape($attribute).'"'; >+ } >+ $isName = not($isName); >+ } >+ $prefix .= ':' if $prefix ne ''; >+ # XML output: >+ $parser->{'Walker Data'}->{'code-xml'} .= "<$prefix$tagName$defaultXML$newNamespaces$attributes>" if applicable($parser, 'xml'); >+ # XHTML output >+ $parser->{'Walker Data'}->{'code-xhtml'} .= "<$prefix$tagName$defaultXHTML$newNamespaces$attributes>" if applicable($parser, 'xhtml'); >+ # HTML output is same as XHTML output except for namespaces - flag if there are any >+ $parser->{'Walker Data'}->{'code-html'} .= "<$tagName$attributes>" if applicable($parser, 'html'); >+ >+ if ($prefix ne '' or $defaultXHTML ne '' or $newNamespaces ne '') { >+ $parser->{'Walker Data'}->{'namespaced'} = 1; >+ $parser->{'Walker Data'}->{'only-xml'} = 1 if applicable($parser, 'html'); >+ } >+ $parser->{'Walker Data'}->{'endTag'} = "</$prefix$tagName>"; # used to regenerate the end tag if required (i.e. if this was originally an empty start tag) >+} >+ >+sub applicable { >+ my($parser, $for) = @_; >+ return ((not defined($parser->{'Walker Data'}->{'restrict'})) or >+ ($parser->{'Walker Data'}->{'restrict'} =~ m/\b # word boundary >+ \Q$for\E # quote $for string (so that $for is not treated as regexp) >+ \b # word boundary >+ /x)); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..e45dc05913d1cc2e23ec5f3d386659c18e12e2d4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/generators.pm >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/helpers.pm >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/utils/parser.pm >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log >index 6cfa60f9154860a82dd97d75b043f97d21cc60af..e230483bc6c558cc57b3be4cdfb2b0de1683ffaa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/w3c-import.log >@@ -14,8 +14,334 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/CHANGES >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/Makefile > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/README >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/TODO >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/anplusb-selector-parsing.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/any-link-dynamic-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/child-indexed-pseudo-class.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-1.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-10.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-100b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-101b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-102b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-103b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-104b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-105b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-106b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-107b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-108b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-109b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-11.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-110b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-111b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-112b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-113b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-114b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-115b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-116b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-117b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-118.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-119.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-12.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-120.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-121.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-122.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-123b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-124b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-125b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-126b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-127b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-128b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-129b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-13.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-130b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-131b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-132b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-133b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-134b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-135b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-136b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-137b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-138b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-139b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-140b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-141b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-142b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-143b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-144.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-145b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-146b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-147b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-148.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-149b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14d.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-14e.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-150.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-151.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-152.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-153.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-154.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-155d.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-156c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-157.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-158.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-159.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-15c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-16.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-160.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-161.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-162.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-163.xml-disabled-contains-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-164.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-165.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-166a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-167a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-168a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-169a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-17.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-170d.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-171.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-172b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-173b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-174b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-175c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-176.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-177b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-178.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-179a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180.xml-disabled-because-we-want-to-allow-for-expansion >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-180a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-181.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-182.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-183.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184d.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184e.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-184f.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-18c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19a.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-19b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-2.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-20.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-21c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-22.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-23.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-24.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-25.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-27b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-28c.pl-draft >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-29b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-30.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-31.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-32.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-33.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-34.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-35.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-36.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-37.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-38.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-39c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-3a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-4.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-40.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-41a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-42a.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-43b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-44d.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-45c.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-46b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-47.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-48.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-49.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-5.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-50.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-51.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-52.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-53.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-54.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-55.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-56.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-57b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-58.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-59.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-6.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-60.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-61.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-62.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-63.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-64.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-65.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-66b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-67.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-68.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-69.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-70.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-72b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-73b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-74b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-75b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-76b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-77b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-78b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-79.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7c.xml-disabled-due-to-limitations-in-the-build-system >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-7d.xml-disabled-due-to-limitations-in-the-build-system >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-8.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-80.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-81b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-82b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-83.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84.xml-disabled-contains-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-84b.xml-disabled-contains-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-85.xml-disabled-contains-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-86.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-87b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-88b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-89.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-9.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-90b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-91.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-92.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-93.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-94b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-95.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-96b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-97b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-98b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-99b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d1b.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d2.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d3.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d4.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5a.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5b.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5c.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5d.xml-removed >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/css3-modsel-d5e.xml-removed > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-display-none-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-visible-005.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-002-expected.html >@@ -48,10 +374,23 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-005.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-006-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/focus-within-shadow-006.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/htaccess >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-full.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/html-shell.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-nested.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/matches-specificity.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/missing-right-token.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/of-type-selectors-expected.xhtml > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/of-type-selectors.xhtml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/root-siblings.htm > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/scope-without-scoping-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/scope-without-scoping.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-no-selection-noref.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001-noref.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selection-image-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-001-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-placeholder-shown-type-change-002-expected.html >@@ -68,7 +407,21 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-required-type-change-002-expected.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-required-type-change-002.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-required.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selector-structural-pseudo-root.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001-expected.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-attr-white-space-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-ltr-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-ltr-001.html > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-rtl-001-expected.xht > /LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-dir-selector-rtl-001.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001-expected.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-empty-001.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001-expected.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/selectors-namespace-001.xml >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/tng.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid.html >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-full.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-shell.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-full.css >+/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-shell.css >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-full.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-full.css >new file mode 100644 >index 0000000000000000000000000000000000000000..6d9654867924389a7abbb5d44336950dc1473df0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-full.css >@@ -0,0 +1,65 @@ >+@namespace url(http://www.w3.org/1999/xhtml); >+ >+pre.rules { >+ border : 1px solid black ; >+ padding : 5px >+} >+ >+.WARNING { >+ background-color: black; >+ color: white; >+ font-weight: bold; >+ margin-top: 1em; >+} >+ >+div.testText { >+ background: white; >+ color: black; >+} >+ >+div.testSource { >+ border: thin black solid; >+ padding-left: 1em; >+ padding-right: 1em; >+} >+ >+div.testDescription { >+ border: thin black solid; >+ background-color: red; >+} >+ >+.testDescription { >+ margin-top: 1em; >+ width: 100%; >+ border: thin solid black; >+ margin-bottom: 1em; >+} >+ >+.testDescription th, >+.testDescription td { >+ text-align: center; >+} >+ >+.testDescription th { >+ background-color: silver; >+} >+ >+.testDescription .a { >+ width: 25%; >+} >+ >+.testDescription .b { >+ width: 50%; >+} >+ >+.testDescription .c { >+ width: 100%; >+} >+ >+div.validator { >+ margin-top: 1em; >+} >+ >+div.validator img { >+ border-width : 0; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-shell.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-shell.css >new file mode 100644 >index 0000000000000000000000000000000000000000..957da843bb826122aff0c7e0b6d2653707b0716b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xhtml-shell.css >@@ -0,0 +1,74 @@ >+@namespace url(http://www.w3.org/1999/xhtml); >+ >+pre.rules { >+ border : 1px solid black ; >+ padding : 5px >+} >+ >+.WARNING { >+ background-color: black; >+ color: white; >+ font-weight: bold; >+ margin-top: 1em; >+} >+ >+div.testSource { >+ border: thin black solid; >+ padding-left: 1em; >+ padding-right: 1em; >+} >+ >+div.testDescription { >+ border: thin black solid; >+ background-color: red; >+} >+ >+.testDescription { >+ margin-top: 1em; >+ width: 100%; >+ border: thin solid black; >+ margin-bottom: 1em; >+} >+ >+.testDescription th, >+.testDescription td { >+ text-align: center; >+} >+ >+.testDescription th { >+ background-color: silver; >+} >+ >+.testDescription .a { >+ width: 25%; >+} >+ >+.testDescription .b { >+ width: 50%; >+} >+ >+.testDescription .c { >+ width: 100%; >+} >+ >+div.validator { >+ margin-top: 1em; >+} >+ >+div.validator img { >+ border-width : 0; >+} >+ >+iframe, object { >+ display: block; >+ position: fixed; >+ top: static-position; >+ left: 1em; >+ right: 1em; >+ bottom: 1em; >+ margin: 0; >+ width: auto; >+ height: auto; >+ padding: 0; >+ border: thin black solid; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-full.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-full.css >new file mode 100644 >index 0000000000000000000000000000000000000000..b4176074f4bdc3cdd0e6e8f92bee0d502440afd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-full.css >@@ -0,0 +1,15 @@ >+test { display: block; background: white; color: black; } >+ title { display: block; border-bottom: solid; margin: 0 0 0.5em 0; padding: 0.5em 1em 0 1em; font-size: 1.5em; } >+ author { display: none; } >+ metadata { display: table; border-spacing: 1em 0.4em; } >+ item { display: table-row; } >+ name { display: table-cell; } >+ data { display: table-cell; } >+ data:link { color: blue; text-decoration: underline; } >+ data:visited { color: navy; text-decoration: underline; } >+ requirement { display: block; margin: 1em; background: black; color: white; } >+ content { display: block; border: solid; margin: 1em; padding: 1em; } >+ source { display: block; font-family: monospace; } >+ css { display: block; white-space: pre; border: solid; margin: 1em; padding: 1em; } >+ xml { display: block; white-space: pre; border: solid; margin: 1em; padding: 1em; } >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-shell.css b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-shell.css >new file mode 100644 >index 0000000000000000000000000000000000000000..b4176074f4bdc3cdd0e6e8f92bee0d502440afd6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/selectors/xml-shell.css >@@ -0,0 +1,15 @@ >+test { display: block; background: white; color: black; } >+ title { display: block; border-bottom: solid; margin: 0 0 0.5em 0; padding: 0.5em 1em 0 1em; font-size: 1.5em; } >+ author { display: none; } >+ metadata { display: table; border-spacing: 1em 0.4em; } >+ item { display: table-row; } >+ name { display: table-cell; } >+ data { display: table-cell; } >+ data:link { color: blue; text-decoration: underline; } >+ data:visited { color: navy; text-decoration: underline; } >+ requirement { display: block; margin: 1em; background: black; color: white; } >+ content { display: block; border: solid; margin: 1em; padding: 1em; } >+ source { display: block; font-family: monospace; } >+ css { display: block; white-space: pre; border: solid; margin: 1em; padding: 1em; } >+ xml { display: block; white-space: pre; border: solid; margin: 1em; padding: 1em; } >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/support/blue32x32.ico b/LayoutTests/imported/w3c/web-platform-tests/css/support/blue32x32.ico >new file mode 100644 >index 0000000000000000000000000000000000000000..5844dd614c22028ce81422233c0aa400a6f41e0d >GIT binary patch >literal 326 >pcmZQzU<5)11tu_Uz{tQL#=yX!0mKSG>;S|dd0gN>E{PE)4ggmv0v7-P > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/support/grid.css b/LayoutTests/imported/w3c/web-platform-tests/css/support/grid.css >new file mode 100644 >index 0000000000000000000000000000000000000000..602e114880ae6576c0d440cf524ad284f89e708f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/support/grid.css >@@ -0,0 +1,277 @@ >+.grid { >+ display: grid; >+ background-color: grey; >+} >+ >+.inline-grid { >+ display: inline-grid; >+ background-color: grey; >+} >+ >+.firstRowFirstColumn { >+ background-color: blue; >+ grid-column: 1; >+ grid-row: 1; >+} >+ >+.onlyFirstRowOnlyFirstColumn { >+ background-color: blue; >+ grid-column: 1 / 2; >+ grid-row: 1 / 2; >+} >+ >+.firstRowSecondColumn { >+ background-color: lime; >+ grid-column: 2; >+ grid-row: 1; >+} >+ >+.onlyFirstRowOnlySecondColumn { >+ background-color: lime; >+ grid-column: 2 / 3; >+ grid-row: 1 / 2; >+} >+ >+.secondRowFirstColumn { >+ background-color: purple; >+ grid-column: 1; >+ grid-row: 2; >+} >+ >+.onlySecondRowOnlyFirstColumn { >+ background-color: purple; >+ grid-column: 1 / 2; >+ grid-row: 2 / 3; >+} >+ >+.secondRowSecondColumn { >+ background-color: orange; >+ grid-column: 2; >+ grid-row: 2; >+} >+ >+.onlySecondRowOnlySecondColumn { >+ background-color: orange; >+ grid-column: 2 / 3; >+ grid-row: 2 / 3; >+} >+ >+.endSecondRowEndSecondColumn { >+ background-color: orange; >+ grid-column-end: 3; >+ grid-row-end: 3; >+} >+ >+.thirdRowSecondColumn { >+ background-color: red; >+ grid-column: 2; >+ grid-row: 3; >+} >+ >+.firstRowThirdColumn { >+ background-color: magenta; >+ grid-column: 3; >+ grid-row: 1; >+} >+ >+.secondRowThirdColumn { >+ background-color: navy; >+ grid-column: 3; >+ grid-row: 2; >+} >+ >+.firstRowFourthColumn { >+ background-color: green; >+ grid-column: 4; >+ grid-row: 1; >+} >+ >+.secondRowFourthColumn { >+ background-color: pink; >+ grid-column: 4; >+ grid-row: 2; >+} >+ >+.firstAutoRowSecondAutoColumn { >+ grid-row: 1 / auto; >+ grid-column: 2 / auto; >+} >+ >+.autoLastRowAutoLastColumn { >+ grid-row: auto / -1; >+ grid-column: auto / -1; >+} >+ >+.autoSecondRowAutoFirstColumn { >+ grid-row: auto / 2; >+ grid-column: auto / 1; >+} >+ >+.firstRowBothColumn { >+ grid-row: 1; >+ grid-column: 1 / -1; >+} >+ >+.secondRowBothColumn { >+ grid-row: 2; >+ grid-column: 1 / -1; >+} >+ >+.bothRowFirstColumn { >+ grid-row: 1 / -1; >+ grid-column: 1; >+} >+ >+.bothRowSecondColumn { >+ grid-row: 1 / -1; >+ grid-column: 2; >+} >+ >+.bothRowBothColumn { >+ grid-row: 1 / -1; >+ grid-column: 1 / -1; >+} >+ >+/* Auto column / row. */ >+.autoRowAutoColumn { >+ background-color: pink; >+ grid-column: auto; >+ grid-row: auto; >+} >+ >+.firstRowAutoColumn { >+ background-color: blue; >+ grid-column: auto; >+ grid-row: 1; >+} >+ >+.secondRowAutoColumn { >+ background-color: purple; >+ grid-column: auto; >+ grid-row: 2; >+} >+ >+.thirdRowAutoColumn { >+ background-color: navy; >+ grid-column: auto; >+ grid-row: 3; >+} >+ >+.autoRowFirstColumn { >+ background-color: lime; >+ grid-column: 1; >+ grid-row: auto; >+} >+ >+.autoRowSecondColumn { >+ background-color: orange; >+ grid-column: 2; >+ grid-row: auto; >+} >+ >+.autoRowThirdColumn { >+ background-color: magenta; >+ grid-column: 3; >+ grid-row: auto; >+} >+ >+.autoRowAutoColumnSpanning2 { >+ background-color: maroon; >+ grid-column: span 2; >+ grid-row: auto; >+} >+ >+.autoRowSpanning2AutoColumn { >+ background-color: aqua; >+ grid-column: auto; >+ grid-row: span 2; >+} >+ >+.autoRowSpanning2AutoColumnSpanning3 { >+ background-color: olive; >+ grid-column: span 3; >+ grid-row: span 2; >+} >+ >+.autoRowSpanning3AutoColumnSpanning2 { >+ background-color: indigo; >+ grid-column: span 2; >+ grid-row: span 3; >+} >+ >+.autoRowFirstColumnSpanning2 { >+ background-color: maroon; >+ grid-column: 1 / span 2; >+ grid-row: auto; >+} >+ >+.autoRowSecondColumnSpanning2 { >+ background-color: olive; >+ grid-column: 2 / span 2; >+ grid-row: auto; >+} >+ >+.firstRowSpanning2AutoColumn { >+ background-color: maroon; >+ grid-column: auto; >+ grid-row: 1 / span 2; >+ height: 100%; >+} >+ >+.secondRowSpanning2AutoColumn { >+ background-color: olive; >+ grid-column: auto; >+ grid-row: 2 / span 2; >+ height: 100%; >+} >+ >+/* Grid element flow. */ >+.gridAutoFlowColumnSparse { >+ grid-auto-flow: column; >+} >+ >+.gridAutoFlowColumnDense { >+ grid-auto-flow: column dense; >+} >+ >+.gridAutoFlowRowSparse { >+ grid-auto-flow: row; >+} >+ >+.gridAutoFlowRowDense { >+ grid-auto-flow: row dense; >+} >+ >+/* This rule makes sure the container is smaller than any grid items to avoid distributing any extra logical space to them. */ >+.constrainedContainer { >+ width: 10px; >+ height: 10px; >+} >+ >+.unconstrainedContainer { >+ width: 1000px; >+ height: 1000px; >+} >+ >+.sizedToGridArea { >+ font: 10px/1 Ahem; >+ /* Make us fit our grid area. */ >+ width: 100%; >+ height: 100%; >+} >+ >+.verticalRL { >+ writing-mode: vertical-rl; >+} >+.verticalLR { >+ writing-mode: vertical-lr; >+} >+.horizontalTB { >+ writing-mode: horizontal-tb; >+} >+.directionRTL { >+ direction: rtl; >+} >+.directionLTR { >+ direction: ltr; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/css/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/css/support/w3c-import.log >index c2892e8f7badbd0afad4f1abf912d917729ec549..f95e9d74333761fc9851590ba05708f5d0462ad1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/css/support/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/css/support/w3c-import.log >@@ -28,9 +28,11 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/css/support/a-green.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/alignment.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/b-green.css >+/LayoutTests/imported/w3c/web-platform-tests/css/support/blue32x32.ico > /LayoutTests/imported/w3c/web-platform-tests/css/support/c-red.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/cat.png > /LayoutTests/imported/w3c/web-platform-tests/css/support/green.ico >+/LayoutTests/imported/w3c/web-platform-tests/css/support/grid.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/import-green.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/import-red.css > /LayoutTests/imported/w3c/web-platform-tests/css/support/pattern-grg-rgr-grg.png >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..64166f6ffb9968b543ac23feba49dab5054dd009 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 93: TypeError: null is not an object (evaluating 'document.body.appendChild') >+#PID UNRESPONSIVE - com.apple.WebKit.WebContent.Development (pid 93908) >+FAIL: Timed out waiting for notifyDone to be called >+ >+#EOF >+#EOF >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg.svg b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg.svg >new file mode 100644 >index 0000000000000000000000000000000000000000..0b53bd830f8e68404828b9ec2a6c77cf4825ee83 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElement-svg.svg >@@ -0,0 +1,24 @@ >+<?xml version="1.0" encoding="utf-8"?> >+<svg:svg xmlns:svg="http://www.w3.org/2000/svg" >+ xmlns="http://www.w3.org/1999/xhtml" >+ width="100%" height="100%" viewBox="0 0 800 600"> >+<svg:title>document.createElement in SVG for custom elements</svg:title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script><![CDATA[ >+test(() => { >+ class MyElement1 extends HTMLElement {} >+ customElements.define('my-element', MyElement1); >+ let element = document.createElement('my-element', {}); >+ assert_false(element instanceof MyElement1, 'Autonomous custom element should not be created.'); >+}, 'document.createElement() in SVG documents should not create autonomous custom elements.') >+ >+test(() => { >+ class MyElement2 extends HTMLDivElement {} >+ customElements.define('my-div', MyElement2, { extends: 'div' }); >+ >+ let element = document.createElement('div', { is: 'my-div' }); >+ assert_false(element instanceof MyElement2, 'Custom built-in element should not be created.'); >+}, 'document.createElement() in SVG documents should not create custom built-in elements.') >+]]></script> >+</svg:svg> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..181f11cd998ba11b6f87cac501bcffc3dfb857db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS autonomous: document.createElementNS should create custom elements with prefixes. >+PASS autonomous: document.createElementNS should check namespaces. >+PASS autonomous: document.createElementNS should not create HTMLUnknownElement for a valid custom element name >+FAIL builtin: document.createElementNS should create custom elements with prefixes. assert_true: expected true got false >+PASS builtin: document.createElementNS should check namespaces. >+FAIL document.createElementNS()'s third argument is to be ignored when it's a string assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6377ba63fca15a3b547465217fbab58ca4849420 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/Document-createElementNS.html >@@ -0,0 +1,68 @@ >+<!DOCTYPE html> >+<title>Custom Elements: document.createElementNS should support custom elements</title> >+<link rel="help" content="https://dom.spec.whatwg.org/#concept-create-element"> >+<link rel="help" content="https://dom.spec.whatwg.org/#internal-createelementns-steps"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body> >+<script> >+test(() => { >+ class MyElement extends HTMLElement {}; >+ >+ customElements.define('my-autonomous', MyElement); >+ let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:my-autonomous'); >+ assert_true(element instanceof MyElement); >+ assert_equals(element.prefix, 'p'); >+}, 'autonomous: document.createElementNS should create custom elements with prefixes.'); >+ >+test(() => { >+ class MyElement2 extends HTMLElement {}; >+ >+ customElements.define('my-autonomous2', MyElement2); >+ let element = document.createElementNS('urn:example', 'my-autonomous2'); >+ assert_false(element instanceof MyElement2); >+}, 'autonomous: document.createElementNS should check namespaces.'); >+ >+test(() => { >+ const xhtmlNS = 'http://www.w3.org/1999/xhtml'; >+ assert_false(document.createElementNS(xhtmlNS, 'x-foo') instanceof HTMLUnknownElement); >+ assert_false(document.createElementNS(xhtmlNS, 'x-foo', {}) instanceof HTMLUnknownElement); >+ assert_false((new Document()).createElementNS(xhtmlNS, 'x-foo') instanceof HTMLUnknownElement); >+ assert_false((new Document()).createElementNS(xhtmlNS, 'x-foo', {}) instanceof HTMLUnknownElement); >+}, 'autonomous: document.createElementNS should not create HTMLUnknownElement for a valid custom element name'); >+ >+test(() => { >+ class MyBuiltinElement extends HTMLElement {}; >+ >+ customElements.define('my-builtin', MyBuiltinElement, { extends: 'address' }); >+ let element = document.createElementNS('http://www.w3.org/1999/xhtml', 'p:address', { is: 'my-builtin'}); >+ assert_true(element instanceof MyBuiltinElement); >+ assert_equals(element.prefix, 'p'); >+ assert_false(element.hasAttribute('is')); >+}, 'builtin: document.createElementNS should create custom elements with prefixes.'); >+ >+test(() => { >+ class MyBuiltinElement2 extends HTMLElement {}; >+ >+ customElements.define('my-builtin2', MyBuiltinElement2, { extends: 'address'}); >+ let element = document.createElementNS('urn:example', 'address', { is: 'my-builtin2' }); >+ assert_false(element instanceof MyBuiltinElement2); >+ assert_false(element.hasAttribute('is')); >+}, 'builtin: document.createElementNS should check namespaces.'); >+ >+test(() => { >+ class SuperP extends HTMLParagraphElement {} >+ customElements.define("super-p", SuperP, { extends: "p" }); >+ >+ const superP = document.createElementNS("http://www.w3.org/1999/xhtml", "p", { is: "super-p" }); >+ assert_true(superP instanceof HTMLParagraphElement); >+ assert_true(superP instanceof SuperP); >+ assert_equals(superP.localName, "p"); >+ >+ const notSuperP = document.createElementNS("http://www.w3.org/1999/xhtml", "p", "super-p"); >+ assert_true(notSuperP instanceof HTMLParagraphElement); >+ assert_false(notSuperP instanceof SuperP); >+ assert_equals(notSuperP.localName, "p"); >+}, "document.createElementNS()'s third argument is to be ignored when it's a string"); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor-expected.txt >index b667d6e9cf05e4b866e97c6574c89d9a43e9c795..ca4289609b9302241c48da8cf0f56bc35a5d3c71 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor-expected.txt >@@ -7,4 +7,11 @@ PASS Custom element constructor must throw TypeError when it does not extend the > PASS HTMLElement constructor must infer the tag name from the element interface > PASS HTMLElement constructor must allow subclassing a custom element > PASS HTMLElement constructor must allow subclassing an user-defined subclass of HTMLElement >+PASS HTMLElement constructor must only get .prototype once, calling proxy constructor directly >+PASS HTMLElement constructor must only get .prototype once, calling proxy constructor via Reflect >+PASS HTMLElement constructor must only get .prototype once, calling proxy constructor via Reflect with no inheritance >+FAIL HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly assert_throws: Should not be able to construct an HTMLElement named 'button' function "function () { new countingProxy() }" did not throw >+FAIL HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect assert_throws: Should not be able to construct an HTMLElement named 'button' function "function () { Reflect.construct(HTMLElement, [], countingProxy) }" did not throw >+PASS HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling proxy constructor directly >+PASS HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling via Reflect > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor.html >index cb6d5409962b1b868060ac8e7d668665bf8e342f..a0bfa909bae1e98febaa5ef8eb3170ca30b58c13 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/HTMLElement-constructor.html >@@ -91,6 +91,159 @@ test(function () { > > }, 'HTMLElement constructor must allow subclassing an user-defined subclass of HTMLElement'); > >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ customElements.define("success-counting-element-1", countingProxy); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ var instance = new countingProxy(); >+ assert_equals(getCount, 1, "Should have gotten .prototype once"); >+ assert_true(instance instanceof countingProxy); >+ assert_true(instance instanceof HTMLElement); >+ assert_true(instance instanceof SomeCustomElement); >+ assert_equals(instance.localName, "success-counting-element-1"); >+ assert_equals(instance.nodeName, "SUCCESS-COUNTING-ELEMENT-1"); >+}, 'HTMLElement constructor must only get .prototype once, calling proxy constructor directly'); >+ >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ customElements.define("success-counting-element-2", countingProxy); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ var instance = Reflect.construct(HTMLElement, [], countingProxy); >+ assert_equals(getCount, 1, "Should have gotten .prototype once"); >+ assert_true(instance instanceof countingProxy); >+ assert_true(instance instanceof HTMLElement); >+ assert_true(instance instanceof SomeCustomElement); >+ assert_equals(instance.localName, "success-counting-element-2"); >+ assert_equals(instance.nodeName, "SUCCESS-COUNTING-ELEMENT-2"); >+}, 'HTMLElement constructor must only get .prototype once, calling proxy constructor via Reflect'); >+ >+test(function() { >+ class SomeCustomElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ customElements.define("success-counting-element-3", countingProxy); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ var instance = Reflect.construct(HTMLElement, [], countingProxy); >+ assert_equals(getCount, 1, "Should have gotten .prototype once"); >+ assert_true(instance instanceof countingProxy); >+ assert_true(instance instanceof SomeCustomElement); >+ assert_equals(instance.localName, undefined); >+ assert_equals(instance.nodeName, undefined); >+}, 'HTMLElement constructor must only get .prototype once, calling proxy constructor via Reflect with no inheritance'); >+ >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ customElements.define("failure-counting-element-1", countingProxy, >+ { extends: "button" }); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ assert_throws({'name': 'TypeError'}, >+ function () { new countingProxy() }, >+ "Should not be able to construct an HTMLElement named 'button'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly'); >+ >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ customElements.define("failure-counting-element-2", countingProxy, >+ { extends: "button" }); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ assert_throws({'name': 'TypeError'}, >+ function () { Reflect.construct(HTMLElement, [], countingProxy) }, >+ "Should not be able to construct an HTMLElement named 'button'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect'); >+ >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ >+ // Purposefully don't register it. >+ assert_throws({'name': 'TypeError'}, >+ function () { new countingProxy() }, >+ "Should not be able to construct an HTMLElement named 'button'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling proxy constructor directly'); >+ >+test(function() { >+ class SomeCustomElement extends HTMLElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ >+ // Purposefully don't register it. >+ assert_throws({'name': 'TypeError'}, >+ function () { Reflect.construct(HTMLElement, [], countingProxy) }, >+ "Should not be able to construct an HTMLElement named 'button'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLElement constructor must not get .prototype until it finishes its registration sanity checks, calling via Reflect'); > </script> > </body> > </html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8e357f067c0b8c013ff1e6f76294f5c2c4eef691 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage-expected.txt >@@ -0,0 +1,874 @@ >+ >+PASS a: Define a customized built-in element >+FAIL a: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL a: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAnchorElement {}" but got function "function HTMLAnchorElement() { >+ [native code] >+}" >+FAIL a: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAnchorElement {}" but got function "function HTMLAnchorElement() { >+ [native code] >+}" >+PASS abbr: Define a customized built-in element >+PASS abbr: Operator 'new' should instantiate a customized built-in element >+FAIL abbr: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL abbr: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS address: Define a customized built-in element >+PASS address: Operator 'new' should instantiate a customized built-in element >+FAIL address: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL address: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS area: Define a customized built-in element >+FAIL area: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL area: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAreaElement {}" but got function "function HTMLAreaElement() { >+ [native code] >+}" >+FAIL area: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAreaElement {}" but got function "function HTMLAreaElement() { >+ [native code] >+}" >+PASS article: Define a customized built-in element >+PASS article: Operator 'new' should instantiate a customized built-in element >+FAIL article: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL article: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS aside: Define a customized built-in element >+PASS aside: Operator 'new' should instantiate a customized built-in element >+FAIL aside: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL aside: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS audio: Define a customized built-in element >+FAIL audio: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL audio: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAudioElement {}" but got function "function HTMLAudioElement() { >+ [native code] >+}" >+FAIL audio: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLAudioElement {}" but got function "function HTMLAudioElement() { >+ [native code] >+}" >+PASS b: Define a customized built-in element >+PASS b: Operator 'new' should instantiate a customized built-in element >+FAIL b: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL b: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS base: Define a customized built-in element >+FAIL base: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL base: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBaseElement {}" but got function "function HTMLBaseElement() { >+ [native code] >+}" >+FAIL base: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBaseElement {}" but got function "function HTMLBaseElement() { >+ [native code] >+}" >+PASS bdi: Define a customized built-in element >+PASS bdi: Operator 'new' should instantiate a customized built-in element >+FAIL bdi: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL bdi: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS bdo: Define a customized built-in element >+PASS bdo: Operator 'new' should instantiate a customized built-in element >+FAIL bdo: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL bdo: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS blockquote: Define a customized built-in element >+FAIL blockquote: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL blockquote: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLQuoteElement {}" but got function "function HTMLQuoteElement() { >+ [native code] >+}" >+FAIL blockquote: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLQuoteElement {}" but got function "function HTMLQuoteElement() { >+ [native code] >+}" >+PASS body: Define a customized built-in element >+FAIL body: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL body: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBodyElement {}" but got function "function HTMLBodyElement() { >+ [native code] >+}" >+FAIL body: document parser should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBodyElement {}" but got function "function HTMLBodyElement() { >+ [native code] >+}" >+PASS br: Define a customized built-in element >+FAIL br: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL br: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBRElement {}" but got function "function HTMLBRElement() { >+ [native code] >+}" >+FAIL br: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLBRElement {}" but got function "function HTMLBRElement() { >+ [native code] >+}" >+PASS button: Define a customized built-in element >+FAIL button: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL button: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLButtonElement {}" but got function "function HTMLButtonElement() { >+ [native code] >+}" >+FAIL button: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLButtonElement {}" but got function "function HTMLButtonElement() { >+ [native code] >+}" >+PASS canvas: Define a customized built-in element >+FAIL canvas: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL canvas: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLCanvasElement {}" but got function "function HTMLCanvasElement() { >+ [native code] >+}" >+FAIL canvas: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLCanvasElement {}" but got function "function HTMLCanvasElement() { >+ [native code] >+}" >+PASS caption: Define a customized built-in element >+FAIL caption: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL caption: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCaptionElement {}" but got function "function HTMLTableCaptionElement() { >+ [native code] >+}" >+FAIL caption: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCaptionElement {}" but got function "function HTMLTableCaptionElement() { >+ [native code] >+}" >+PASS cite: Define a customized built-in element >+PASS cite: Operator 'new' should instantiate a customized built-in element >+FAIL cite: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL cite: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS code: Define a customized built-in element >+PASS code: Operator 'new' should instantiate a customized built-in element >+FAIL code: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL code: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS col: Define a customized built-in element >+FAIL col: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL col: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableColElement {}" but got function "function HTMLTableColElement() { >+ [native code] >+}" >+FAIL col: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableColElement {}" but got function "function HTMLTableColElement() { >+ [native code] >+}" >+PASS colgroup: Define a customized built-in element >+FAIL colgroup: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL colgroup: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableColElement {}" but got function "function HTMLTableColElement() { >+ [native code] >+}" >+FAIL colgroup: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableColElement {}" but got function "function HTMLTableColElement() { >+ [native code] >+}" >+PASS data: Define a customized built-in element >+FAIL data: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL data: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDataElement {}" but got function "function HTMLDataElement() { >+ [native code] >+}" >+FAIL data: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDataElement {}" but got function "function HTMLDataElement() { >+ [native code] >+}" >+PASS dd: Define a customized built-in element >+PASS dd: Operator 'new' should instantiate a customized built-in element >+FAIL dd: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL dd: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS del: Define a customized built-in element >+FAIL del: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL del: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLModElement {}" but got function "function HTMLModElement() { >+ [native code] >+}" >+FAIL del: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLModElement {}" but got function "function HTMLModElement() { >+ [native code] >+}" >+PASS details: Define a customized built-in element >+FAIL details: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL details: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDetailsElement {}" but got function "function HTMLDetailsElement() { >+ [native code] >+}" >+FAIL details: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDetailsElement {}" but got function "function HTMLDetailsElement() { >+ [native code] >+}" >+PASS dfn: Define a customized built-in element >+PASS dfn: Operator 'new' should instantiate a customized built-in element >+FAIL dfn: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL dfn: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS div: Define a customized built-in element >+FAIL div: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL div: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDivElement {}" but got function "function HTMLDivElement() { >+ [native code] >+}" >+FAIL div: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDivElement {}" but got function "function HTMLDivElement() { >+ [native code] >+}" >+PASS dl: Define a customized built-in element >+FAIL dl: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL dl: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDListElement {}" but got function "function HTMLDListElement() { >+ [native code] >+}" >+FAIL dl: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLDListElement {}" but got function "function HTMLDListElement() { >+ [native code] >+}" >+PASS dt: Define a customized built-in element >+PASS dt: Operator 'new' should instantiate a customized built-in element >+FAIL dt: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL dt: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS em: Define a customized built-in element >+PASS em: Operator 'new' should instantiate a customized built-in element >+FAIL em: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL em: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS embed: Define a customized built-in element >+FAIL embed: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL embed: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLEmbedElement {}" but got function "function HTMLEmbedElement() { >+ [native code] >+}" >+FAIL embed: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLEmbedElement {}" but got function "function HTMLEmbedElement() { >+ [native code] >+}" >+PASS fieldset: Define a customized built-in element >+FAIL fieldset: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL fieldset: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLFieldSetElement {}" but got function "function HTMLFieldSetElement() { >+ [native code] >+}" >+FAIL fieldset: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLFieldSetElement {}" but got function "function HTMLFieldSetElement() { >+ [native code] >+}" >+PASS figcaption: Define a customized built-in element >+PASS figcaption: Operator 'new' should instantiate a customized built-in element >+FAIL figcaption: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL figcaption: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS figure: Define a customized built-in element >+PASS figure: Operator 'new' should instantiate a customized built-in element >+FAIL figure: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL figure: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS footer: Define a customized built-in element >+PASS footer: Operator 'new' should instantiate a customized built-in element >+FAIL footer: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL footer: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS form: Define a customized built-in element >+FAIL form: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL form: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLFormElement {}" but got function "function HTMLFormElement() { >+ [native code] >+}" >+FAIL form: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLFormElement {}" but got function "function HTMLFormElement() { >+ [native code] >+}" >+PASS h1: Define a customized built-in element >+FAIL h1: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h1: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h1: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS h2: Define a customized built-in element >+FAIL h2: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h2: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h2: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS h3: Define a customized built-in element >+FAIL h3: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h3: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h3: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS h4: Define a customized built-in element >+FAIL h4: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h4: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h4: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS h5: Define a customized built-in element >+FAIL h5: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h5: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h5: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS h6: Define a customized built-in element >+FAIL h6: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL h6: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+FAIL h6: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHeadingElement {}" but got function "function HTMLHeadingElement() { >+ [native code] >+}" >+PASS header: Define a customized built-in element >+PASS header: Operator 'new' should instantiate a customized built-in element >+FAIL header: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL header: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS hgroup: Define a customized built-in element >+PASS hgroup: Operator 'new' should instantiate a customized built-in element >+FAIL hgroup: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL hgroup: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS hr: Define a customized built-in element >+FAIL hr: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL hr: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHRElement {}" but got function "function HTMLHRElement() { >+ [native code] >+}" >+FAIL hr: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHRElement {}" but got function "function HTMLHRElement() { >+ [native code] >+}" >+PASS html: Define a customized built-in element >+FAIL html: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL html: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHtmlElement {}" but got function "function HTMLHtmlElement() { >+ [native code] >+}" >+FAIL html: document parser should instantiate a customized built-in element assert_equals: expected function "class extends HTMLHtmlElement {}" but got function "function HTMLHtmlElement() { >+ [native code] >+}" >+PASS i: Define a customized built-in element >+PASS i: Operator 'new' should instantiate a customized built-in element >+FAIL i: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL i: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS iframe: Define a customized built-in element >+FAIL iframe: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL iframe: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLIFrameElement {}" but got function "function HTMLIFrameElement() { >+ [native code] >+}" >+FAIL iframe: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLIFrameElement {}" but got function "function HTMLIFrameElement() { >+ [native code] >+}" >+PASS img: Define a customized built-in element >+FAIL img: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL img: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLImageElement {}" but got function "function HTMLImageElement() { >+ [native code] >+}" >+FAIL img: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLImageElement {}" but got function "function HTMLImageElement() { >+ [native code] >+}" >+PASS input: Define a customized built-in element >+FAIL input: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL input: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLInputElement {}" but got function "function HTMLInputElement() { >+ [native code] >+}" >+FAIL input: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLInputElement {}" but got function "function HTMLInputElement() { >+ [native code] >+}" >+PASS ins: Define a customized built-in element >+FAIL ins: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL ins: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLModElement {}" but got function "function HTMLModElement() { >+ [native code] >+}" >+FAIL ins: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLModElement {}" but got function "function HTMLModElement() { >+ [native code] >+}" >+PASS kbd: Define a customized built-in element >+PASS kbd: Operator 'new' should instantiate a customized built-in element >+FAIL kbd: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL kbd: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS label: Define a customized built-in element >+FAIL label: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL label: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLabelElement {}" but got function "function HTMLLabelElement() { >+ [native code] >+}" >+FAIL label: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLabelElement {}" but got function "function HTMLLabelElement() { >+ [native code] >+}" >+PASS legend: Define a customized built-in element >+FAIL legend: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL legend: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLegendElement {}" but got function "function HTMLLegendElement() { >+ [native code] >+}" >+FAIL legend: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLegendElement {}" but got function "function HTMLLegendElement() { >+ [native code] >+}" >+PASS li: Define a customized built-in element >+FAIL li: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL li: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLIElement {}" but got function "function HTMLLIElement() { >+ [native code] >+}" >+FAIL li: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLIElement {}" but got function "function HTMLLIElement() { >+ [native code] >+}" >+PASS link: Define a customized built-in element >+FAIL link: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL link: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLinkElement {}" but got function "function HTMLLinkElement() { >+ [native code] >+}" >+FAIL link: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLLinkElement {}" but got function "function HTMLLinkElement() { >+ [native code] >+}" >+PASS main: Define a customized built-in element >+PASS main: Operator 'new' should instantiate a customized built-in element >+FAIL main: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL main: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS map: Define a customized built-in element >+FAIL map: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL map: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMapElement {}" but got function "function HTMLMapElement() { >+ [native code] >+}" >+FAIL map: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMapElement {}" but got function "function HTMLMapElement() { >+ [native code] >+}" >+PASS mark: Define a customized built-in element >+PASS mark: Operator 'new' should instantiate a customized built-in element >+FAIL mark: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL mark: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS menu: Define a customized built-in element >+FAIL menu: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL menu: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMenuElement {}" but got function "function HTMLMenuElement() { >+ [native code] >+}" >+FAIL menu: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMenuElement {}" but got function "function HTMLMenuElement() { >+ [native code] >+}" >+PASS meta: Define a customized built-in element >+FAIL meta: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL meta: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMetaElement {}" but got function "function HTMLMetaElement() { >+ [native code] >+}" >+FAIL meta: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMetaElement {}" but got function "function HTMLMetaElement() { >+ [native code] >+}" >+PASS meter: Define a customized built-in element >+FAIL meter: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL meter: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMeterElement {}" but got function "function HTMLMeterElement() { >+ [native code] >+}" >+FAIL meter: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLMeterElement {}" but got function "function HTMLMeterElement() { >+ [native code] >+}" >+PASS nav: Define a customized built-in element >+PASS nav: Operator 'new' should instantiate a customized built-in element >+FAIL nav: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL nav: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS noscript: Define a customized built-in element >+PASS noscript: Operator 'new' should instantiate a customized built-in element >+FAIL noscript: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL noscript: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS object: Define a customized built-in element >+FAIL object: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL object: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLObjectElement {}" but got function "function HTMLObjectElement() { >+ [native code] >+}" >+FAIL object: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLObjectElement {}" but got function "function HTMLObjectElement() { >+ [native code] >+}" >+PASS ol: Define a customized built-in element >+FAIL ol: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL ol: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOListElement {}" but got function "function HTMLOListElement() { >+ [native code] >+}" >+FAIL ol: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOListElement {}" but got function "function HTMLOListElement() { >+ [native code] >+}" >+PASS optgroup: Define a customized built-in element >+FAIL optgroup: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL optgroup: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOptGroupElement {}" but got function "function HTMLOptGroupElement() { >+ [native code] >+}" >+FAIL optgroup: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOptGroupElement {}" but got function "function HTMLOptGroupElement() { >+ [native code] >+}" >+PASS option: Define a customized built-in element >+FAIL option: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL option: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOptionElement {}" but got function "function HTMLOptionElement() { >+ [native code] >+}" >+FAIL option: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOptionElement {}" but got function "function HTMLOptionElement() { >+ [native code] >+}" >+PASS output: Define a customized built-in element >+FAIL output: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL output: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOutputElement {}" but got function "function HTMLOutputElement() { >+ [native code] >+}" >+FAIL output: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLOutputElement {}" but got function "function HTMLOutputElement() { >+ [native code] >+}" >+PASS p: Define a customized built-in element >+FAIL p: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL p: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLParagraphElement {}" but got function "function HTMLParagraphElement() { >+ [native code] >+}" >+FAIL p: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLParagraphElement {}" but got function "function HTMLParagraphElement() { >+ [native code] >+}" >+PASS param: Define a customized built-in element >+FAIL param: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL param: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLParamElement {}" but got function "function HTMLParamElement() { >+ [native code] >+}" >+FAIL param: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLParamElement {}" but got function "function HTMLParamElement() { >+ [native code] >+}" >+PASS picture: Define a customized built-in element >+FAIL picture: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL picture: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLPictureElement {}" but got function "function HTMLPictureElement() { >+ [native code] >+}" >+FAIL picture: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLPictureElement {}" but got function "function HTMLPictureElement() { >+ [native code] >+}" >+PASS pre: Define a customized built-in element >+FAIL pre: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL pre: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLPreElement {}" but got function "function HTMLPreElement() { >+ [native code] >+}" >+FAIL pre: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLPreElement {}" but got function "function HTMLPreElement() { >+ [native code] >+}" >+PASS progress: Define a customized built-in element >+FAIL progress: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL progress: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLProgressElement {}" but got function "function HTMLProgressElement() { >+ [native code] >+}" >+FAIL progress: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLProgressElement {}" but got function "function HTMLProgressElement() { >+ [native code] >+}" >+PASS q: Define a customized built-in element >+FAIL q: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL q: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLQuoteElement {}" but got function "function HTMLQuoteElement() { >+ [native code] >+}" >+FAIL q: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLQuoteElement {}" but got function "function HTMLQuoteElement() { >+ [native code] >+}" >+PASS rp: Define a customized built-in element >+PASS rp: Operator 'new' should instantiate a customized built-in element >+FAIL rp: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL rp: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS rt: Define a customized built-in element >+PASS rt: Operator 'new' should instantiate a customized built-in element >+FAIL rt: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL rt: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS ruby: Define a customized built-in element >+PASS ruby: Operator 'new' should instantiate a customized built-in element >+FAIL ruby: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL ruby: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS s: Define a customized built-in element >+PASS s: Operator 'new' should instantiate a customized built-in element >+FAIL s: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL s: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS samp: Define a customized built-in element >+PASS samp: Operator 'new' should instantiate a customized built-in element >+FAIL samp: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL samp: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS script: Define a customized built-in element >+FAIL script: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL script: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLScriptElement {}" but got function "function HTMLScriptElement() { >+ [native code] >+}" >+FAIL script: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLScriptElement {}" but got function "function HTMLScriptElement() { >+ [native code] >+}" >+PASS section: Define a customized built-in element >+PASS section: Operator 'new' should instantiate a customized built-in element >+FAIL section: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL section: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS select: Define a customized built-in element >+FAIL select: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL select: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSelectElement {}" but got function "function HTMLSelectElement() { >+ [native code] >+}" >+FAIL select: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSelectElement {}" but got function "function HTMLSelectElement() { >+ [native code] >+}" >+PASS small: Define a customized built-in element >+PASS small: Operator 'new' should instantiate a customized built-in element >+FAIL small: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL small: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS source: Define a customized built-in element >+FAIL source: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL source: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSourceElement {}" but got function "function HTMLSourceElement() { >+ [native code] >+}" >+FAIL source: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSourceElement {}" but got function "function HTMLSourceElement() { >+ [native code] >+}" >+PASS span: Define a customized built-in element >+FAIL span: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL span: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSpanElement {}" but got function "function HTMLSpanElement() { >+ [native code] >+}" >+FAIL span: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSpanElement {}" but got function "function HTMLSpanElement() { >+ [native code] >+}" >+PASS strong: Define a customized built-in element >+PASS strong: Operator 'new' should instantiate a customized built-in element >+FAIL strong: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL strong: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS style: Define a customized built-in element >+FAIL style: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL style: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLStyleElement {}" but got function "function HTMLStyleElement() { >+ [native code] >+}" >+FAIL style: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLStyleElement {}" but got function "function HTMLStyleElement() { >+ [native code] >+}" >+PASS sub: Define a customized built-in element >+PASS sub: Operator 'new' should instantiate a customized built-in element >+FAIL sub: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL sub: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS summary: Define a customized built-in element >+PASS summary: Operator 'new' should instantiate a customized built-in element >+FAIL summary: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL summary: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS sup: Define a customized built-in element >+PASS sup: Operator 'new' should instantiate a customized built-in element >+FAIL sup: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL sup: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS table: Define a customized built-in element >+FAIL table: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL table: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableElement {}" but got function "function HTMLTableElement() { >+ [native code] >+}" >+FAIL table: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableElement {}" but got function "function HTMLTableElement() { >+ [native code] >+}" >+PASS tbody: Define a customized built-in element >+FAIL tbody: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL tbody: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+FAIL tbody: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+PASS td: Define a customized built-in element >+FAIL td: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL td: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCellElement {}" but got function "function HTMLTableCellElement() { >+ [native code] >+}" >+FAIL td: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCellElement {}" but got function "function HTMLTableCellElement() { >+ [native code] >+}" >+PASS template: Define a customized built-in element >+FAIL template: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL template: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTemplateElement {}" but got function "function HTMLTemplateElement() { >+ [native code] >+}" >+FAIL template: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTemplateElement {}" but got function "function HTMLTemplateElement() { >+ [native code] >+}" >+PASS textarea: Define a customized built-in element >+FAIL textarea: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL textarea: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTextAreaElement {}" but got function "function HTMLTextAreaElement() { >+ [native code] >+}" >+FAIL textarea: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTextAreaElement {}" but got function "function HTMLTextAreaElement() { >+ [native code] >+}" >+PASS tfoot: Define a customized built-in element >+FAIL tfoot: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL tfoot: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+FAIL tfoot: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+PASS th: Define a customized built-in element >+FAIL th: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL th: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCellElement {}" but got function "function HTMLTableCellElement() { >+ [native code] >+}" >+FAIL th: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableCellElement {}" but got function "function HTMLTableCellElement() { >+ [native code] >+}" >+PASS thead: Define a customized built-in element >+FAIL thead: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL thead: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+FAIL thead: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableSectionElement {}" but got function "function HTMLTableSectionElement() { >+ [native code] >+}" >+PASS time: Define a customized built-in element >+FAIL time: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL time: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTimeElement {}" but got function "function HTMLTimeElement() { >+ [native code] >+}" >+FAIL time: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTimeElement {}" but got function "function HTMLTimeElement() { >+ [native code] >+}" >+PASS title: Define a customized built-in element >+FAIL title: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL title: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTitleElement {}" but got function "function HTMLTitleElement() { >+ [native code] >+}" >+FAIL title: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTitleElement {}" but got function "function HTMLTitleElement() { >+ [native code] >+}" >+PASS tr: Define a customized built-in element >+FAIL tr: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL tr: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableRowElement {}" but got function "function HTMLTableRowElement() { >+ [native code] >+}" >+FAIL tr: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTableRowElement {}" but got function "function HTMLTableRowElement() { >+ [native code] >+}" >+PASS track: Define a customized built-in element >+FAIL track: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL track: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTrackElement {}" but got function "function HTMLTrackElement() { >+ [native code] >+}" >+FAIL track: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLTrackElement {}" but got function "function HTMLTrackElement() { >+ [native code] >+}" >+PASS u: Define a customized built-in element >+PASS u: Operator 'new' should instantiate a customized built-in element >+FAIL u: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL u: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS ul: Define a customized built-in element >+FAIL ul: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL ul: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLUListElement {}" but got function "function HTMLUListElement() { >+ [native code] >+}" >+FAIL ul: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLUListElement {}" but got function "function HTMLUListElement() { >+ [native code] >+}" >+PASS var: Define a customized built-in element >+PASS var: Operator 'new' should instantiate a customized built-in element >+FAIL var: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL var: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS video: Define a customized built-in element >+FAIL video: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL video: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLVideoElement {}" but got function "function HTMLVideoElement() { >+ [native code] >+}" >+FAIL video: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLVideoElement {}" but got function "function HTMLVideoElement() { >+ [native code] >+}" >+PASS wbr: Define a customized built-in element >+PASS wbr: Operator 'new' should instantiate a customized built-in element >+FAIL wbr: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+FAIL wbr: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLElement {}" but got function "function HTMLElement() { >+ [native code] >+}" >+PASS slot: Define a customized built-in element >+FAIL slot: Operator 'new' should instantiate a customized built-in element function is not a constructor (evaluating 'super(...args)') >+FAIL slot: document.createElement() should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSlotElement {}" but got function "function HTMLSlotElement() { >+ [native code] >+}" >+FAIL slot: innerHTML should instantiate a customized built-in element assert_equals: expected function "class extends HTMLSlotElement {}" but got function "function HTMLSlotElement() { >+ [native code] >+}" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e3001a2c4855e9c10afaf46cdd2fe60fcd2a1cd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage.html >@@ -0,0 +1,182 @@ >+<!DOCTYPE html> >+<html is="my-html"> >+<head> >+<meta charset="utf-8"> >+<meta name="help" content="https://html.spec.whatwg.org/multipage/custom-elements.html#element-definition"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+</head> >+<body is="my-body"> >+<div id="container"></div> >+<script> >+let testData = [ >+ {tag: 'a', interface: 'HTMLAnchorElement'}, >+ {tag: 'abbr', interface: 'HTMLElement'}, >+ {tag: 'address', interface: 'HTMLElement'}, >+ {tag: 'area', interface: 'HTMLAreaElement'}, >+ {tag: 'article', interface: 'HTMLElement'}, >+ {tag: 'aside', interface: 'HTMLElement'}, >+ {tag: 'audio', interface: 'HTMLAudioElement'}, >+ {tag: 'b', interface: 'HTMLElement'}, >+ {tag: 'base', interface: 'HTMLBaseElement'}, >+ {tag: 'bdi', interface: 'HTMLElement'}, >+ {tag: 'bdo', interface: 'HTMLElement'}, >+ {tag: 'blockquote', interface: 'HTMLQuoteElement'}, >+ {tag: 'body', interface: 'HTMLBodyElement', parsing: 'document'}, >+ {tag: 'br', interface: 'HTMLBRElement'}, >+ {tag: 'button', interface: 'HTMLButtonElement'}, >+ {tag: 'canvas', interface: 'HTMLCanvasElement'}, >+ {tag: 'caption', interface: 'HTMLTableCaptionElement', parsing: 'table'}, >+ {tag: 'cite', interface: 'HTMLElement'}, >+ {tag: 'code', interface: 'HTMLElement'}, >+ {tag: 'col', interface: 'HTMLTableColElement', parsing: 'table'}, >+ {tag: 'colgroup', interface: 'HTMLTableColElement', parsing: 'table'}, >+ {tag: 'data', interface: 'HTMLDataElement'}, >+ {tag: 'dd', interface: 'HTMLElement'}, >+ {tag: 'del', interface: 'HTMLModElement'}, >+ {tag: 'details', interface: 'HTMLDetailsElement'}, >+ {tag: 'dfn', interface: 'HTMLElement'}, >+ {tag: 'div', interface: 'HTMLDivElement'}, >+ {tag: 'dl', interface: 'HTMLDListElement'}, >+ {tag: 'dt', interface: 'HTMLElement'}, >+ {tag: 'em', interface: 'HTMLElement'}, >+ {tag: 'embed', interface: 'HTMLEmbedElement'}, >+ {tag: 'fieldset', interface: 'HTMLFieldSetElement'}, >+ {tag: 'figcaption', interface: 'HTMLElement'}, >+ {tag: 'figure', interface: 'HTMLElement'}, >+ {tag: 'footer', interface: 'HTMLElement'}, >+ {tag: 'form', interface: 'HTMLFormElement'}, >+ {tag: 'h1', interface: 'HTMLHeadingElement'}, >+ {tag: 'h2', interface: 'HTMLHeadingElement'}, >+ {tag: 'h3', interface: 'HTMLHeadingElement'}, >+ {tag: 'h4', interface: 'HTMLHeadingElement'}, >+ {tag: 'h5', interface: 'HTMLHeadingElement'}, >+ {tag: 'h6', interface: 'HTMLHeadingElement'}, >+ {tag: 'header', interface: 'HTMLElement'}, >+ {tag: 'hgroup', interface: 'HTMLElement'}, >+ {tag: 'hr', interface: 'HTMLHRElement'}, >+ {tag: 'html', interface: 'HTMLHtmlElement', parsing: 'document'}, >+ {tag: 'i', interface: 'HTMLElement'}, >+ {tag: 'iframe', interface: 'HTMLIFrameElement'}, >+ {tag: 'img', interface: 'HTMLImageElement'}, >+ {tag: 'input', interface: 'HTMLInputElement'}, >+ {tag: 'ins', interface: 'HTMLModElement'}, >+ {tag: 'kbd', interface: 'HTMLElement'}, >+ {tag: 'label', interface: 'HTMLLabelElement'}, >+ {tag: 'legend', interface: 'HTMLLegendElement'}, >+ {tag: 'li', interface: 'HTMLLIElement'}, >+ {tag: 'link', interface: 'HTMLLinkElement'}, >+ {tag: 'main', interface: 'HTMLElement'}, >+ {tag: 'map', interface: 'HTMLMapElement'}, >+ {tag: 'mark', interface: 'HTMLElement'}, >+ {tag: 'menu', interface: 'HTMLMenuElement'}, >+ {tag: 'meta', interface: 'HTMLMetaElement'}, >+ {tag: 'meter', interface: 'HTMLMeterElement'}, >+ {tag: 'nav', interface: 'HTMLElement'}, >+ {tag: 'noscript', interface: 'HTMLElement'}, >+ {tag: 'object', interface: 'HTMLObjectElement'}, >+ {tag: 'ol', interface: 'HTMLOListElement'}, >+ {tag: 'optgroup', interface: 'HTMLOptGroupElement'}, >+ {tag: 'option', interface: 'HTMLOptionElement'}, >+ {tag: 'output', interface: 'HTMLOutputElement'}, >+ {tag: 'p', interface: 'HTMLParagraphElement'}, >+ {tag: 'param', interface: 'HTMLParamElement'}, >+ {tag: 'picture', interface: 'HTMLPictureElement'}, >+ {tag: 'pre', interface: 'HTMLPreElement'}, >+ {tag: 'progress', interface: 'HTMLProgressElement'}, >+ {tag: 'q', interface: 'HTMLQuoteElement'}, >+ {tag: 'rp', interface: 'HTMLElement'}, >+ {tag: 'rt', interface: 'HTMLElement'}, >+ {tag: 'ruby', interface: 'HTMLElement'}, >+ {tag: 's', interface: 'HTMLElement'}, >+ {tag: 'samp', interface: 'HTMLElement'}, >+ {tag: 'script', interface: 'HTMLScriptElement'}, >+ {tag: 'section', interface: 'HTMLElement'}, >+ {tag: 'select', interface: 'HTMLSelectElement'}, >+ {tag: 'small', interface: 'HTMLElement'}, >+ {tag: 'source', interface: 'HTMLSourceElement'}, >+ {tag: 'span', interface: 'HTMLSpanElement'}, >+ {tag: 'strong', interface: 'HTMLElement'}, >+ {tag: 'style', interface: 'HTMLStyleElement'}, >+ {tag: 'sub', interface: 'HTMLElement'}, >+ {tag: 'summary', interface: 'HTMLElement'}, >+ {tag: 'sup', interface: 'HTMLElement'}, >+ {tag: 'table', interface: 'HTMLTableElement'}, >+ {tag: 'tbody', interface: 'HTMLTableSectionElement', parsing: 'table'}, >+ {tag: 'td', interface: 'HTMLTableCellElement', parsing: 'table'}, >+ {tag: 'template', interface: 'HTMLTemplateElement'}, >+ {tag: 'textarea', interface: 'HTMLTextAreaElement'}, >+ {tag: 'tfoot', interface: 'HTMLTableSectionElement', parsing: 'table'}, >+ {tag: 'th', interface: 'HTMLTableCellElement', parsing: 'table'}, >+ {tag: 'thead', interface: 'HTMLTableSectionElement', parsing: 'table'}, >+ {tag: 'time', interface: 'HTMLTimeElement'}, >+ {tag: 'title', interface: 'HTMLTitleElement'}, >+ {tag: 'tr', interface: 'HTMLTableRowElement', parsing: 'table'}, >+ {tag: 'track', interface: 'HTMLTrackElement'}, >+ {tag: 'u', interface: 'HTMLElement'}, >+ {tag: 'ul', interface: 'HTMLUListElement'}, >+ {tag: 'var', interface: 'HTMLElement'}, >+ {tag: 'video', interface: 'HTMLVideoElement'}, >+ {tag: 'wbr', interface: 'HTMLElement'}, >+]; >+// HTMLDataListElement isn't implemented by all major browsers yet. >+if (window.HTMLDataListElement) { >+ testData.push({tag: 'datalist', interface: 'HTMLDataListElement'}); >+} >+// HTMLDialogElement isn't implemented by all major browsers yet. >+if (window.HTMLDialogElement) { >+ testData.push({tag: 'dialog', interface: 'HTMLDialogElement'}); >+} >+// HTMLSlotElement isn't implemented by all major browsers yet. >+if (window.HTMLSlotElement) { >+ testData.push({tag: 'slot', interface: 'HTMLSlotElement'}); >+} >+ >+for (const t of testData) { >+ test(() => { >+ let name = 'my-' + t.tag; >+ let klass = eval(`(class extends ${t.interface} {})`); >+ customElements.define(name, klass, { extends: t.tag }); >+ >+ test(() => { >+ let customized = new klass(); >+ assert_equals(customized.constructor, klass); >+ assert_equals(customized.cloneNode().constructor, klass, >+ 'Cloning a customized built-in element should succeed.'); >+ }, `${t.tag}: Operator 'new' should instantiate a customized built-in element`); >+ >+ test(() => { >+ let customized = document.createElement(t.tag, { is: name }); >+ assert_equals(customized.constructor, klass); >+ assert_equals(customized.cloneNode().constructor, klass, >+ 'Cloning a customized built-in element should succeed.'); >+ }, `${t.tag}: document.createElement() should instantiate a customized built-in element`); >+ >+ if (t.parsing == 'document') { >+ let test = async_test(`${t.tag}: document parser should instantiate a customized built-in element`); >+ window.addEventListener('load', test.step_func_done(() => { >+ let customized = document.querySelector(t.tag); >+ assert_equals(customized.constructor, klass); >+ assert_equals(customized.cloneNode().constructor, klass, >+ 'Cloning a customized built-in element should succeed.'); >+ })); >+ return; >+ } >+ test(() => { >+ let container = document.getElementById('container'); >+ if (t.parsing == 'table') { >+ container.innerHTML = `<table><${t.tag} is="${name}" id="${name}">`; >+ } else { >+ container.innerHTML = `<${t.tag} is="${name}" id="${name}">`; >+ } >+ let customized = document.getElementById(name); >+ assert_equals(customized.constructor, klass); >+ assert_equals(customized.cloneNode().constructor, klass, >+ 'Cloning a customized built-in element should succeed.'); >+ }, `${t.tag}: innerHTML should instantiate a customized built-in element`); >+ >+ }, `${t.tag}: Define a customized built-in element`); >+} >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..266d6832919edb4875d8714fcd96e5b51aae23d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing-expected.txt >@@ -0,0 +1,10 @@ >+ >+FAIL Inserting a custom element into the document using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into the document of the template elements using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into a new document using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into a cloned document using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into a document created by createHTMLDocument using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into an HTML document created by createDocument using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into the document of an iframe using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+FAIL Inserting a custom element into an HTML document fetched by XHR using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor assert_equals: expected 1 but got 2 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f24cc209c893ff0e6f69fd19651e0bad66419cd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html >@@ -0,0 +1,49 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>Custom Elements: the HTML fragment parsing algorithm must not create a custom element synchronously</title> >+<meta name="author" title="Rob Buis" href="mailto:rbuis@igalia.com"> >+<meta name="assert" content="The HTML fragment parsing algorithm must enqueue a custom element upgrade reaction instead of synchronously invoking its constructor"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/custom-elements-helpers.js"></script> >+</head> >+<body> >+<div id="log"></div> >+<script> >+ >+let iteration = 0; >+ >+document_types().forEach(function (entry) { >+ var documentName = entry.name; >+ var getDocument = entry.create; >+ let calls = 0; >+ >+ promise_test(function () { >+ class Parenter extends HTMLElement { >+ connectedCallback() { >+ const child = this.firstChild; >+ this.removeChild(child); >+ this.appendChild(child); >+ } >+ } >+ class Child extends HTMLElement { >+ connectedCallback() { calls++; } >+ } >+ iteration++; >+ let parenter = 'x-parenter' + iteration; >+ let child = 'x-child' + iteration; >+ customElements.define(parenter, Parenter); >+ customElements.define(child, Child); >+ return getDocument().then(function (doc) { >+ document.documentElement.innerHTML = `<${parenter}><${child}></${child}></${parenter}>`; >+ doc.documentElement.appendChild(document.documentElement.firstChild); >+ assert_equals(calls, 1); >+ }); >+ }, `Inserting a custom element into ${documentName} using HTML fragment parsing must enqueue a custom element upgrade reaction, not synchronously invoke its constructor`); >+}); >+ >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..475bd1cce2464724eafc81f636449de5777b3adf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL Upgrading an element directly (example from the spec) customElements.upgrade is not a function. (In 'customElements.upgrade(el)', 'customElements.upgrade' is undefined) >+FAIL Two elements as children of the upgraded node customElements.upgrade is not a function. (In 'customElements.upgrade(container)', 'customElements.upgrade' is undefined) >+FAIL Two elements as descendants of the upgraded node customElements.upgrade is not a function. (In 'customElements.upgrade(container)', 'customElements.upgrade' is undefined) >+FAIL Two elements as shadow-including descendants (and not descendants) of the upgraded node customElements.upgrade is not a function. (In 'customElements.upgrade(container)', 'customElements.upgrade' is undefined) >+FAIL Elements inside a template contents DocumentFragment node customElements.upgrade is not a function. (In 'customElements.upgrade(template)', 'customElements.upgrade' is undefined) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e020d95a576852b8a95c1f72a6061571efb6a4af >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade.html >@@ -0,0 +1,157 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>customElements.upgrade()</title> >+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-customelementregistry-upgrade"> >+ >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+"use strict"; >+ >+test(() => { >+ const el = document.createElement("spider-man"); >+ >+ class SpiderMan extends HTMLElement {} >+ customElements.define("spider-man", SpiderMan); >+ >+ assert_false(el instanceof SpiderMan, "The element must not yet be upgraded"); >+ >+ customElements.upgrade(el); >+ assert_true(el instanceof SpiderMan, "The element must now be upgraded"); >+}, "Upgrading an element directly (example from the spec)"); >+ >+test(() => { >+ const el1 = document.createElement("element-a-1"); >+ const el2 = document.createElement("element-a-2"); >+ const container = document.createElement("div"); >+ container.appendChild(el1); >+ container.appendChild(el2); >+ >+ class Element1 extends HTMLElement {} >+ class Element2 extends HTMLElement {} >+ customElements.define("element-a-1", Element1); >+ customElements.define("element-a-2", Element2); >+ >+ assert_false(el1 instanceof Element1, "element 1 must not yet be upgraded"); >+ assert_false(el2 instanceof Element2, "element 2 must not yet be upgraded"); >+ >+ customElements.upgrade(container); >+ assert_true(el1 instanceof Element1, "element 1 must now be upgraded"); >+ assert_true(el2 instanceof Element2, "element 2 must now be upgraded"); >+}, "Two elements as children of the upgraded node"); >+ >+test(() => { >+ const el1 = document.createElement("element-b-1"); >+ const el2 = document.createElement("element-b-2"); >+ const container = document.createElement("div"); >+ const subContainer = document.createElement("span"); >+ const subSubContainer = document.createElement("span"); >+ container.appendChild(subContainer); >+ subContainer.appendChild(el1); >+ subContainer.appendChild(subSubContainer); >+ subSubContainer.appendChild(el2); >+ >+ class Element1 extends HTMLElement {} >+ class Element2 extends HTMLElement {} >+ customElements.define("element-b-1", Element1); >+ customElements.define("element-b-2", Element2); >+ >+ assert_false(el1 instanceof Element1, "element 1 must not yet be upgraded"); >+ assert_false(el2 instanceof Element2, "element 2 must not yet be upgraded"); >+ >+ customElements.upgrade(container); >+ assert_true(el1 instanceof Element1, "element 1 must now be upgraded"); >+ assert_true(el2 instanceof Element2, "element 2 must now be upgraded"); >+}, "Two elements as descendants of the upgraded node"); >+ >+test(() => { >+ const el1 = document.createElement("element-d-1"); >+ const el2 = document.createElement("element-d-2"); >+ >+ const container = document.createElement("div"); >+ const subContainer = document.createElement("span"); >+ subContainer.attachShadow({ mode: "open" }); >+ const subSubContainer = document.createElement("span"); >+ subSubContainer.attachShadow({ mode: "open" }); >+ >+ container.appendChild(subContainer); >+ subContainer.shadowRoot.appendChild(el1); >+ subContainer.shadowRoot.appendChild(subSubContainer); >+ subSubContainer.shadowRoot.appendChild(el2); >+ >+ class Element1 extends HTMLElement {} >+ class Element2 extends HTMLElement {} >+ customElements.define("element-d-1", Element1); >+ customElements.define("element-d-2", Element2); >+ >+ assert_false(el1 instanceof Element1, "element 1 must not yet be upgraded"); >+ assert_false(el2 instanceof Element2, "element 2 must not yet be upgraded"); >+ >+ customElements.upgrade(container); >+ assert_true(el1 instanceof Element1, "element 1 must now be upgraded"); >+ assert_true(el2 instanceof Element2, "element 2 must now be upgraded"); >+}, "Two elements as shadow-including descendants (and not descendants) of the upgraded node"); >+ >+test(() => { >+ const template = document.createElement("template"); >+ template.innerHTML = ` >+ <div> >+ <element-c-1></element-c-1> >+ <element-c-2> >+ <element-c-3></element-c-3> >+ <span> >+ <element-c-4></element-c-4> >+ </span> >+ </element-c-2> >+ </div> >+ <element-c-5></element-c-5> >+ `; >+ >+ // This code feels repetitive but I tried to make it use loops and it became harder to see the correctness. >+ >+ const el1 = template.content.querySelector("element-c-1"); >+ const el2 = template.content.querySelector("element-c-2"); >+ const el3 = template.content.querySelector("element-c-3"); >+ const el4 = template.content.querySelector("element-c-4"); >+ const el5 = template.content.querySelector("element-c-5"); >+ >+ class Element1 extends HTMLElement {} >+ class Element2 extends HTMLElement {} >+ class Element3 extends HTMLElement {} >+ class Element4 extends HTMLElement {} >+ class Element5 extends HTMLElement {} >+ >+ customElements.define("element-c-1", Element1); >+ customElements.define("element-c-2", Element2); >+ customElements.define("element-c-3", Element3); >+ customElements.define("element-c-4", Element4); >+ customElements.define("element-c-5", Element5); >+ >+ assert_false(el1 instanceof Element1, "element 1 must not yet be upgraded"); >+ assert_false(el2 instanceof Element2, "element 2 must not yet be upgraded"); >+ assert_false(el3 instanceof Element3, "element 3 must not yet be upgraded"); >+ assert_false(el4 instanceof Element4, "element 4 must not yet be upgraded"); >+ assert_false(el5 instanceof Element5, "element 5 must not yet be upgraded"); >+ >+ customElements.upgrade(template); >+ >+ assert_false(el1 instanceof Element1, "element 1 must not yet be upgraded despite upgrading the template"); >+ assert_false(el2 instanceof Element2, "element 2 must not yet be upgraded despite upgrading the template"); >+ assert_false(el3 instanceof Element3, "element 3 must not yet be upgraded despite upgrading the template"); >+ assert_false(el4 instanceof Element4, "element 4 must not yet be upgraded despite upgrading the template"); >+ assert_false(el5 instanceof Element5, "element 5 must not yet be upgraded despite upgrading the template"); >+ >+ customElements.upgrade(template.content); >+ >+ // Template contents owner documents don't have a browsing context, so >+ // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition does not find any >+ // custom element definition. >+ assert_false(el1 instanceof Element1, "element 1 must still not be upgraded after upgrading the template contents"); >+ assert_false(el2 instanceof Element2, "element 2 must still not be upgraded after upgrading the template contents"); >+ assert_false(el3 instanceof Element3, "element 3 must still not be upgraded after upgrading the template contents"); >+ assert_false(el4 instanceof Element4, "element 4 must still not be upgraded after upgrading the template contents"); >+ assert_false(el5 instanceof Element5, "element 5 must still not be upgraded after upgrading the template contents"); >+}, "Elements inside a template contents DocumentFragment node"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget-expected.txt >index e8ffae4104231ca860cdd75ebd989a9d4d8ace5f..2b5357791e71bb64cf8e372b2ddd53777ab1ab43 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget-expected.txt >@@ -9,4 +9,6 @@ FAIL If prototype is not object (null), derives the fallback from NewTarget's re > FAIL If prototype is not object (undefined), derives the fallback from NewTarget's realm (customized built-in elements) promise_test: Unhandled rejection with value: object "TypeError: Reflect.construct requires the first argument be a constructor" > FAIL If prototype is not object (5), derives the fallback from NewTarget's realm (customized built-in elements) promise_test: Unhandled rejection with value: object "TypeError: Reflect.construct requires the first argument be a constructor" > FAIL If prototype is not object (string), derives the fallback from NewTarget's realm (customized built-in elements) promise_test: Unhandled rejection with value: object "TypeError: Reflect.construct requires the first argument be a constructor" >+PASS HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly >+PASS HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget.html >index ab43803c244e5f4492a1eb9c74337f24b89fabf6..7dad26493d22414a9d036ff1d999cdf4b955b250 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget.html >@@ -124,5 +124,46 @@ test_with_window(w => { > }, "If prototype is not object (" + notAnObject + "), derives the fallback from NewTarget's realm (customized built-in elements)"); > }); > >+test_with_window(w => { >+ class SomeCustomElement extends HTMLParagraphElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ w.customElements.define("failure-counting-element", countingProxy); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ assert_throws({'name': 'TypeError'}, >+ function () { new countingProxy() }, >+ "Should not be able to construct an HTMLParagraphElement not named 'p'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling proxy constructor directly'); >+ >+test_with_window(w => { >+ class SomeCustomElement extends HTMLParagraphElement {}; >+ var getCount = 0; >+ var countingProxy = new Proxy(SomeCustomElement, { >+ get: function(target, prop, receiver) { >+ if (prop == "prototype") { >+ ++getCount; >+ } >+ return Reflect.get(target, prop, receiver); >+ } >+ }); >+ w.customElements.define("failure-counting-element", countingProxy); >+ // define() gets the prototype of the constructor it's passed, so >+ // reset the counter. >+ getCount = 0; >+ assert_throws({'name': 'TypeError'}, >+ function () { Reflect.construct(HTMLParagraphElement, [], countingProxy) }, >+ "Should not be able to construct an HTMLParagraphElement not named 'p'"); >+ assert_equals(getCount, 0, "Should never have gotten .prototype"); >+}, 'HTMLParagraphElement constructor must not get .prototype until it finishes its extends sanity checks, calling via Reflect'); > </script> >-</body> >\ No newline at end of file >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a137a7fc558d4e1cc91781c09e8ed41675b0d1c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is-expected.txt >@@ -0,0 +1,4 @@ >+ >+PASS HTML parser must create a defined autonomous custom element when customElements.define comes after HTML parser creation >+PASS HTML parser must create a defined autonomous custom element when customElements.define comes before HTML parser creation >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html >new file mode 100644 >index 0000000000000000000000000000000000000000..96c00278a3d7a055021915e1a1c6b9aeab31bb71 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-constructs-custom-elements-with-is.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>Custom Elements: Changes to the HTML parser</title> >+<meta name="author" title="John Dai" href="mailto:jdai@mozilla.com"> >+<meta name="assert" content="HTML parser creates a custom element which contains is attribute"> >+<link rel="help" href="https://html.spec.whatwg.org/#create-an-element-for-the-token"> >+<link rel="help" href="https://dom.spec.whatwg.org/#concept-create-element"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+<div id="log"></div> >+<autonomous-custom-element id="instance1" is="is-custom-element"></autonomous-custom-element> >+<script> >+ >+class AutonomousCustomElement extends HTMLElement { }; >+class IsCustomElement extends HTMLElement { }; >+ >+customElements.define('autonomous-custom-element', AutonomousCustomElement); >+customElements.define('is-custom-element', IsCustomElement); >+ >+test(function () { >+ var customElement = document.getElementById('instance1'); >+ >+ assert_true(customElement instanceof HTMLElement, 'A resolved custom element must be an instance of HTMLElement'); >+ assert_false(customElement instanceof HTMLUnknownElement, 'A resolved custom element must NOT be an instance of HTMLUnknownElement'); >+ assert_true(customElement instanceof AutonomousCustomElement, 'A resolved custom element must be an instance of that custom element'); >+ assert_equals(customElement.localName, 'autonomous-custom-element'); >+ assert_equals(customElement.namespaceURI, 'http://www.w3.org/1999/xhtml', 'A custom element HTML must use HTML namespace'); >+ >+}, 'HTML parser must create a defined autonomous custom element when customElements.define comes after HTML parser creation'); >+ >+</script> >+<autonomous-custom-element id="instance2" is="is-custom-element"></autonomous-custom-element> >+<script> >+ >+test(function () { >+ var customElement = document.getElementById('instance2'); >+ >+ assert_true(customElement instanceof HTMLElement, 'A resolved custom element must be an instance of HTMLElement'); >+ assert_false(customElement instanceof HTMLUnknownElement, 'A resolved custom element must NOT be an instance of HTMLUnknownElement'); >+ assert_true(customElement instanceof AutonomousCustomElement, 'A resolved custom element must be an instance of that custom element'); >+ assert_equals(customElement.localName, 'autonomous-custom-element'); >+ assert_equals(customElement.namespaceURI, 'http://www.w3.org/1999/xhtml', 'A custom element HTML must use HTML namespace'); >+ >+}, 'HTML parser must create a defined autonomous custom element when customElements.define comes before HTML parser creation'); >+ >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0d4280653be1a81d1ca6a418c81df60a46b29f40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 93: TypeError: null is not an object (evaluating 'document.body.appendChild') >+#PID UNRESPONSIVE - com.apple.WebKit.WebContent.Development (pid 94085) >+FAIL: Timed out waiting for notifyDone to be called >+ >+#EOF >+#EOF >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg >new file mode 100644 >index 0000000000000000000000000000000000000000..526de0f63fa2afbe9382eeae35369a3123a83fee >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-create-an-element-for-a-token-svg.svg >@@ -0,0 +1,27 @@ >+<?xml version="1.0" encoding="utf-8"?> >+<svg:svg xmlns:svg="http://www.w3.org/2000/svg" >+ xmlns="http://www.w3.org/1999/xhtml" >+ width="100%" height="100%" viewBox="0 0 800 600"> >+<svg:title>XML parser should use "create an element for a token"</svg:title> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/xhtml.html#parsing-xhtml-documents:create-an-element-for-the-token"/> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script><![CDATA[ >+class MyElement1 extends HTMLElement {} >+customElements.define('my-element', MyElement1); >+class MyElement2 extends HTMLDivElement {} >+customElements.define('my-div', MyElement2, { extends: 'div' }); >+ >+var test1 = async_test('XML parser should create autonomous custom elements.'); >+window.addEventListener('load', test1.step_func_done(() => { >+ assert_true(document.getElementById('me1') instanceof MyElement1); >+})); >+ >+var test2 = async_test('XML parser should create custom built-in elements.'); >+window.addEventListener('load', test2.step_func_done(() => { >+ assert_true(document.getElementById('me2') instanceof MyElement2); >+})); >+]]></script> >+<my-element id="me1"></my-element> >+<div is="my-div" id="me2"></div> >+</svg:svg> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document-expected.txt >index d19f7ed31b1ca0910a219bb85c44418a723b6ef0..130ed1f283f5b559a6dd61fe6bee4ea58d3f003e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/parser-uses-registry-of-owner-document-expected.txt >@@ -6,7 +6,7 @@ PASS HTML parser must not instantiate a custom element defined inside an frame i > PASS HTML parser must use the registry of window.document in a document created by DOMParser > PASS HTML parser must use the registry of window.document in a document created by document.implementation.createXHTMLDocument() > PASS HTML parser must use the registry of window.document in a document created by new Document >-FAIL HTML parser must use the registry of window.document in a document created by XMLHttpRequest promise_test: Unhandled rejection with value: object "TypeError: null is not an object (evaluating 'doc.querySelector')" >+PASS HTML parser must use the registry of window.document in a document created by XMLHttpRequest > FAIL document.write() must not instantiate a custom element without a defined insertion point assert_false: expected false got true > FAIL document.writeln() must not instantiate a custom element without a defined insertion point assert_false: expected false got true > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..437eb733cb9cdf2e1859cab2ca34869f67ce1350 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL "is" value should be serialized if the custom element has no "is" content attribute function is not a constructor (evaluating 'super(...args)') >+FAIL "is" value should be serialized even for an undefined element assert_equals: expected "<p is=\"your-p\"></p>" but got "<p></p>" >+PASS "is" content attribute should be serialized even if the element is a customized built-in element >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6992dd6df6a1b9b75e84d13c8bfc6857b12cee54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/parser/serializing-html-fragments.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body> >+<div id="container"></div> >+<script> >+test(() => { >+ class MyParagraph extends HTMLParagraphElement {} >+ customElements.define('my-p', MyParagraph, { extends: 'p' }); >+ >+ let p = new MyParagraph(); >+ p.setAttribute('class', 'foo'); >+ assert_equals(p.outerHTML, '<p is="my-p" class="foo"></p>'); >+ >+ let container = document.querySelector('#container'); >+ container.appendChild(p); >+ container.innerHTML = container.innerHTML; >+ assert_not_equals(container.firstChild, p); >+ assert_true(container.firstChild instanceof MyParagraph); >+}, '"is" value should be serialized if the custom element has no "is" content attribute'); >+ >+test(() => { >+ let p = document.createElement('p', { is: 'your-p' }); >+ assert_equals(p.outerHTML, '<p is="your-p"></p>'); >+}, '"is" value should be serialized even for an undefined element'); >+ >+test(() => { >+ class MyDiv extends HTMLDivElement {} >+ customElements.define('my-div', MyDiv, { extends: 'div' }); >+ >+ let div = document.createElement('div', { is: 'my-div' }); >+ div.setAttribute('is', 'foo"bar\n'); >+ assert_equals(div.outerHTML, '<div is="foo"bar\n"></div>'); >+}, '"is" content attribute should be serialized even if the element is a customized built-in element'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f7d67f18d4a57af25b7575b127e45ac47d3b2b9f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined-expected.txt >@@ -0,0 +1,5 @@ >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined.html >new file mode 100644 >index 0000000000000000000000000000000000000000..60d88cffb517c0062db338e5ba89e98f7748c280 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/pseudo-class-defined.html >@@ -0,0 +1,93 @@ >+<!DOCTYPE html> >+<link rel="help" href="https://html.spec.whatwg.org/multipage/semantics-other.html#selector-defined"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<iframe id="iframe"></iframe> >+<script> >+const testList = [ >+ { tag_name: 'div', defined: true }, >+ { tag_name: 'a-a', defined: false }, >+ { tag_name: 'font-face', defined: true }, >+ { tag_name: 'abbr', is: 'my-abbr', defined: false }, >+ { tag_name: 'p', is: '', defined: false }, >+]; >+ >+// Setup iframe to test the parser. >+const neither = 'rgb(255, 0, 0)'; >+const defined = 'rgb(255, 165, 0)'; >+const not_defined = 'rgb(0, 0, 255)'; >+iframe.srcdoc = `<style> >+ * { color:${neither}; } >+ :defined { color:${defined}; } >+ :not(:defined) { color:${not_defined}; } >+</style>` >+ + testList.map(d => `<${d.tag_name}${d.is !== undefined ? ' is=' + d.is : ''}></${d.tag_name}>`).join(''); >+setup({ explicit_done: true }); >+iframe.onload = () => { >+ const doc = iframe.contentDocument; >+ const doc_without_browsing_context = doc.implementation.createHTMLDocument(); >+ for (const data of testList) { >+ // Test elements inserted by parser. >+ test_defined(data.defined, doc.getElementsByTagName(data.tag_name)[0], >+ `<${data.tag_name}${data.is ? ' is=' + data.is : ''}>`); >+ >+ // Test DOM createElement() methods. >+ let try_upgrade = !data.defined && (data.is === undefined || data.is.length > 0); >+ test_defined_for_createElement(data.defined, try_upgrade, doc, data.tag_name, data.is); >+ >+ // Documents without browsing context should behave the same. >+ test_defined_for_createElement(data.defined, false, doc_without_browsing_context, data.tag_name, data.is, 'Without browsing context: '); >+ } >+ >+ done(); >+}; >+ >+function test_defined_for_createElement(defined, should_test_change, doc, tag_name, is, description = '') { >+ let has_is = is !== undefined; >+ let is_desc = has_is ? `, { is: "${is}" }` : ''; >+ // Test document.createElement(). >+ let element = has_is ? doc.createElement(tag_name, { is: is }) : doc.createElement(tag_name); >+ doc.body.appendChild(element); >+ test_defined(defined, element, `${description}createElement("${tag_name}"${is_desc})`); >+ >+ // Test document.createElementNS(). >+ let html_element = has_is ? doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name, { is: is }) >+ : doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name); >+ doc.body.appendChild(html_element); >+ test_defined(defined, html_element, `${description}createElementNS("http://www.w3.org/1999/xhtml", "${tag_name}"${is_desc})`); >+ >+ // If the element namespace is not HTML, it should be "uncustomized"; i.e., "defined". >+ let svg_element = has_is ? doc.createElementNS('http://www.w3.org/2000/svg', tag_name, { is: is }) >+ : doc.createElementNS('http://www.w3.org/2000/svg', tag_name); >+ doc.body.appendChild(svg_element); >+ test_defined(true, svg_element, `${description}createElementNS("http://www.w3.org/2000/svg", "${tag_name}"${is_desc})`); >+ >+ // Test ":defined" changes when the custom element was defined. >+ if (should_test_change) { >+ let w = doc.defaultView; >+ assert_false(!w, 'defaultView required to test change'); >+ if (is) { >+ w.customElements.define(is, class extends w.HTMLElement {}, { extends: tag_name }); >+ } else { >+ w.customElements.define(tag_name, class extends w.HTMLElement { >+ constructor() { super(); } >+ }); >+ } >+ >+ test_defined(true, element, `Upgraded ${description}createElement("${tag_name}"${is_desc})`); >+ test_defined(true, html_element, `Upgraded ${description}createElementNS("http://www.w3.org/1999/xhtml", "${tag_name}"${is_desc})`); >+ } >+} >+ >+function test_defined(expected, element, description) { >+ test(() => { >+ assert_equals(element.matches(':defined'), expected, 'matches(":defined")'); >+ assert_equals(element.matches(':not(:defined)'), !expected, 'matches(":not(:defined")'); >+ const view = element.ownerDocument.defaultView; >+ if (!view) >+ return; >+ const style = view.getComputedStyle(element); >+ assert_equals(style.color, expected ? defined : not_defined, 'getComputedStyle'); >+ }, `${description} should ${expected ? 'be' : 'not be'} :defined`); >+} >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b2ffa40b8a5fd1cc1165f2df253f6e2c8c18d138 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS No tests if HTMLInputEement has no "capture" IDL attribute >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dc4b22a22eea3ea841b1380e7db3e75e7f4eb256 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/HTMLInputElement.html >@@ -0,0 +1,66 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Custom Elements: CEReactions on HTMLInputElement interface</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<link rel="author" title="Wanming Lin" href="mailto:wanming.lin@intel.com"> >+<meta name="assert" content="capture of HTMLInputElement interface must have CEReactions"> >+<meta name="help" content="https://www.w3.org/TR/html-media-capture/#the-capture-attribute"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../resources/custom-elements-helpers.js"></script> >+<script src="./resources/reactions.js"></script> >+<body> >+<script> >+if (HTMLInputElement.prototype.capture) { >+ test(() => { >+ const element = define_build_in_custom_element(['capture'], HTMLInputElement, 'input'); >+ const instance = document.createElement('input', { is: element.name }); >+ >+ assert_array_equals(element.takeLog().types(), ['constructed']); >+ instance['capture'] = 'user'; >+ const logEntries = element.takeLog(); >+ assert_array_equals(logEntries.types(), ['attributeChanged']); >+ assert_attribute_log_entry(logEntries.last(), {name: 'capture', oldValue: '', newValue: 'user', namespace: null}); >+ }, 'capture on HTMLInputElement must enqueue an attributeChanged reaction when adding new attribute'); >+ >+ test(() => { >+ const element = define_build_in_custom_element(['capture'], HTMLInputElement, 'input'); >+ const instance = document.createElement('input', { is: element.name }); >+ >+ instance['capture'] = 'user'; >+ assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); >+ instance['capture'] = 'environment'; >+ const logEntries = element.takeLog(); >+ assert_array_equals(logEntries.types(), ['attributeChanged']); >+ assert_attribute_log_entry(logEntries.last(), {name: 'capture', oldValue: 'user', newValue: 'environment', namespace: null}); >+ }, 'capture on HTMLInputElement must enqueue an attributeChanged reaction when replacing an existing attribute'); >+ >+ test(() => { >+ const element = define_build_in_custom_element(['capture'], HTMLInputElement, 'input'); >+ const instance = document.createElement('input', { is: element.name }); >+ >+ assert_array_equals(element.takeLog().types(), ['constructed']); >+ instance['capture'] = 'asdf'; >+ const logEntries = element.takeLog(); >+ assert_array_equals(logEntries.types(), ['attributeChanged']); >+ assert_attribute_log_entry(logEntries.last(), {name: 'capture', oldValue: '', newValue: 'asdf', namespace: null}); >+ }, 'capture on HTMLInputElement must enqueue an attributeChanged reaction when adding invalid value default'); >+ >+ test(() => { >+ const element = define_build_in_custom_element(['capture'], HTMLInputElement, 'input'); >+ const instance = document.createElement('input', { is: element.name }); >+ >+ instance['capture'] = 'user'; >+ assert_array_equals(element.takeLog().types(), ['constructed', 'attributeChanged']); >+ instance['capture'] = ''; >+ const logEntries = element.takeLog(); >+ assert_array_equals(logEntries.types(), ['attributeChanged']); >+ assert_attribute_log_entry(logEntries.last(), {name: 'capture', oldValue: 'user', newValue: '', namespace: null}); >+ }, 'capture on HTMLInputElement must enqueue an attributeChanged reaction when removing the attribute'); >+} else { >+ // testharness.js doesn't allow a test file with no tests. >+ test(() => { >+ }, 'No tests if HTMLInputEement has no "capture" IDL attribute'); >+} >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/with-exceptions.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/with-exceptions.html >new file mode 100644 >index 0000000000000000000000000000000000000000..82e0f59c93022fcd6321c6b8ad1f8d7014b74382 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/reactions/with-exceptions.html >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Custom Elements: CEReactions interaction with exceptions</title> >+<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> >+<meta name="help" content="https://html.spec.whatwg.org/multipage/#cereactions"> >+<meta name="help" content="https://github.com/whatwg/html/pull/3235"> >+ >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../resources/custom-elements-helpers.js"></script> >+ >+<div id="log"></div> >+ >+<script> >+"use strict"; >+// Basically from https://github.com/whatwg/html/issues/3217#issuecomment-343633273 >+test_with_window((contentWindow, contentDocument) => { >+ let reactionRan = false; >+ contentWindow.customElements.define("custom-element", class extends contentWindow.HTMLElement { >+ disconnectedCallback() { >+ reactionRan = true; >+ } >+ }); >+ const text = contentDocument.createTextNode(""); >+ contentDocument.documentElement.appendChild(text); >+ const element = contentDocument.createElement("custom-element"); >+ contentDocument.documentElement.appendChild(element); >+ assert_throws("HierarchyRequestError", () => text.before("", contentDocument.documentElement)); >+ assert_true(reactionRan); >+}, "Reaction must run even after the exception is thrown"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/resources/my-custom-element-html-document.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/resources/my-custom-element-html-document.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b9bfdf90a2d9ae6f2731451b45554ecb70f366d6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/resources/my-custom-element-html-document.html >@@ -0,0 +1,6 @@ >+<!DOCTYPE html> >+<html> >+<body> >+<my-custom-element></my-custom-element> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..226cab8f0b7942c1ecca9f39422133eed245123a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode-expected.txt >@@ -0,0 +1,6 @@ >+ >+PASS autonomous: document.importNode() should import custom elements successfully >+PASS autonomous: document.importNode() should import "undefined" custom elements successfully >+FAIL built-in: document.importNode() should import custom elements successfully assert_true: expected true got false >+FAIL built-in: document.importNode() should import "undefined" custom elements successfully assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode.html b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b80f90648d110a358bef090d3d9830077264cf70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/upgrading/Document-importNode.html >@@ -0,0 +1,56 @@ >+<!DOCTYPE html> >+<link rel="help" href="https://dom.spec.whatwg.org/#dom-document-importnode"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../resources/custom-elements-helpers.js"></script> >+<body> >+<script> >+test_with_window((w, doc) => { >+ class MyElement extends HTMLElement {} >+ class MyElement2 extends w.HTMLElement {} >+ customElements.define('my-element', MyElement); >+ w.customElements.define('my-element', MyElement2); >+ >+ let original = document.createElement('my-element'); >+ assert_true(original instanceof MyElement); >+ >+ let imported = doc.importNode(original); >+ assert_true(imported instanceof MyElement2); >+}, 'autonomous: document.importNode() should import custom elements successfully'); >+ >+test_with_window((w, doc) => { >+ class MyElement3 extends w.HTMLElement {} >+ w.customElements.define('my-element3', MyElement3); >+ >+ let original = document.createElement('my-element3'); >+ assert_equals(original.constructor, HTMLElement); >+ >+ let imported = doc.importNode(original); >+ assert_true(imported instanceof MyElement3); >+}, 'autonomous: document.importNode() should import "undefined" custom elements successfully'); >+ >+test_with_window((w, doc) => { >+ class MyDiv extends HTMLDivElement {} >+ class MyDiv2 extends w.HTMLDivElement {} >+ customElements.define('my-div', MyDiv, { extends: 'div' }); >+ w.customElements.define('my-div', MyDiv2, { extends: 'div' }); >+ >+ let original = document.createElement('div', { is: 'my-div' }); >+ assert_true(original instanceof MyDiv); >+ >+ let imported = doc.importNode(original); >+ assert_true(imported instanceof MyDiv2); >+}, 'built-in: document.importNode() should import custom elements successfully'); >+ >+test_with_window((w, doc) => { >+ class MyDiv2 extends w.HTMLDivElement {} >+ w.customElements.define('my-div2', MyDiv2, { extends: 'div' }); >+ >+ let original = document.createElement('div', { is: 'my-div2' }); >+ assert_equals(original.constructor, HTMLDivElement); >+ >+ let imported = doc.importNode(original); >+ assert_true(imported instanceof MyDiv2); >+}, 'built-in: document.importNode() should import "undefined" custom elements successfully'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/w3c-import.log >index 13acc9c56e05b55824a6fc86dc597e0528f7e38e..7974b5ef517348a4c9737c0c637dfc256fc80e39 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/custom-elements/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/custom-elements/w3c-import.log >@@ -23,6 +23,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/adopted-callback.html > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/attribute-changed-callback.html > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/builtin-coverage.html >+/LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/connected-callbacks.html > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/custom-element-reaction-queue.html > /LayoutTests/imported/w3c/web-platform-tests/custom-elements/disconnected-callbacks.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/device-memory/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..3e7089cf2ccc167bd2d71c7df92df24919a5b06e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/OWNERS >@@ -0,0 +1,2 @@ >+@tdresser >+@npm1 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b7b49abcebacf75f1b7459a3c8d84873269a07b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL navigator.deviceMemory is a positive number, a power of 2, between 0.25 and 8 assert_equals: navigator.deviceMemory returns a number expected "number" but got "undefined" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.html b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.js b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..8f81ffc31f472f525aa360a14e5deba1e912cd90 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.js >@@ -0,0 +1,8 @@ >+test(function() { >+ assert_equals(typeof navigator.deviceMemory, "number", >+ "navigator.deviceMemory returns a number"); >+ assert_true(navigator.deviceMemory >= 0, >+ "navigator.deviceMemory returns a positive value"); >+ assert_true([0.25, 0.5, 1, 2, 4, 8].includes(navigator.deviceMemory), >+ "navigator.deviceMemory returns a power of 2 between 0.25 and 8"); >+}, "navigator.deviceMemory is a positive number, a power of 2, between 0.25 and 8"); >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b7b49abcebacf75f1b7459a3c8d84873269a07b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL navigator.deviceMemory is a positive number, a power of 2, between 0.25 and 8 assert_equals: navigator.deviceMemory returns a number expected "number" but got "undefined" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/device-memory/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/device-memory/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..0bdb9dc2adee9a25f4f75bfdf0b9f2e0e99c167f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/device-memory/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/device-memory/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/device-memory/device-memory.https.any.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS >index 487f8ddbc0e3c54213792a55d5c9c7810cdffacb..9e0a739c373df39032c5d9ef0f4b3d70b447032b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/OWNERS >@@ -1,3 +1,4 @@ > @ayg > @jdm > @zqzhang >+@annevk >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue-expected.txt >index f0022650eac958d260e8295b57db8b8e0a15c9c9..9f7fa81f476117b07daf9ce67494f8b8fcdade52 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue-expected.txt >@@ -5,5 +5,5 @@ PASS returnValue=false should have no effect if cancelable is false. > PASS preventDefault() should change returnValue if cancelable is true. > PASS returnValue should change returnValue if cancelable is true. > PASS initEvent should unset returnValue. >-FAIL returnValue=true should have no effect once the canceled flag was set. assert_true: expected true got false >+PASS returnValue=true should have no effect once the canceled flag was set. > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue.html b/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue.html >index 50c26607415183516afc805e98132cf310a6589e..08df2d41416ffccf65c9fe606469181a9f95f6a8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-returnValue.html >@@ -53,7 +53,7 @@ test(function() { > assert_true(ev.returnValue, "returnValue"); > }, "initEvent should unset returnValue."); > test(function() { >- var ev = new Event("foo"); >+ var ev = new Event("foo", {"cancelable": true}); > ev.preventDefault(); > ev.returnValue = true;// no-op > assert_true(ev.defaultPrevented); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0964fa78e36ccd714b7bc47792a0ed20b95ee379 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS There's no self.event (that's why we call it window.event) in workers >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.html b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.js b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..116cf32932bd8dd0efba8b56a573028a9770d07b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.js >@@ -0,0 +1,14 @@ >+importScripts("/resources/testharness.js"); >+test(t => { >+ let seen = false; >+ const event = new Event("hi"); >+ assert_equals(self.event, undefined); >+ self.addEventListener("hi", t.step_func(e => { >+ seen = true; >+ assert_equals(self.event, undefined); >+ assert_equals(e, event); >+ })); >+ self.dispatchEvent(event); >+ assert_true(seen); >+}, "There's no self.event (that's why we call it window.event) in workers"); >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window.js b/LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ebc83ceb209a7c18cdc722cd70352845409cd893 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window.js >@@ -0,0 +1,81 @@ >+// https://dom.spec.whatwg.org/#concept-event-dispatch >+ >+const host = document.createElement("div"), >+ child = host.appendChild(document.createElement("p")), >+ shadow = host.attachShadow({ mode: "closed" }), >+ slot = shadow.appendChild(document.createElement("slot")); >+ >+test(() => { >+ for (target of [shadow, slot]) { >+ for (relatedTarget of [new XMLHttpRequest(), self, host]) { >+ const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); >+ target.dispatchEvent(event); >+ assert_equals(event.target, null); >+ assert_equals(event.relatedTarget, null); >+ } >+ } >+}, "Reset if target pointed to a shadow tree"); >+ >+test(() => { >+ for (relatedTarget of [shadow, slot]) { >+ for (target of [new XMLHttpRequest(), self, host]) { >+ const event = new FocusEvent("demo", { relatedTarget: relatedTarget }); >+ target.dispatchEvent(event); >+ assert_equals(event.target, target); >+ assert_equals(event.relatedTarget, host); >+ } >+ } >+}, "Retarget a shadow-tree relatedTarget"); >+ >+test(t => { >+ const shadowChild = shadow.appendChild(document.createElement("div")); >+ shadowChild.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); >+ const event = new FocusEvent("demo", { relatedTarget: new XMLHttpRequest() }); >+ shadowChild.dispatchEvent(event); >+ assert_equals(shadowChild.parentNode, document.body); >+ assert_equals(event.target, null); >+ assert_equals(event.relatedTarget, null); >+ shadowChild.remove(); >+}, "Reset if target pointed to a shadow tree pre-dispatch"); >+ >+test(t => { >+ const shadowChild = shadow.appendChild(document.createElement("div")); >+ document.body.addEventListener("demo", t.step_func(() => document.body.appendChild(shadowChild))); >+ const event = new FocusEvent("demo", { relatedTarget: shadowChild }); >+ document.body.dispatchEvent(event); >+ assert_equals(shadowChild.parentNode, document.body); >+ assert_equals(event.target, document.body); >+ assert_equals(event.relatedTarget, host); >+ shadowChild.remove(); >+}, "Retarget a shadow-tree relatedTarget, part 2"); >+ >+test(t => { >+ const event = new FocusEvent("heya", { relatedTarget: shadow, cancelable: true }), >+ callback = t.unreached_func(); >+ host.addEventListener("heya", callback); >+ t.add_cleanup(() => host.removeEventListener("heya", callback)); >+ event.preventDefault(); >+ assert_true(event.defaultPrevented); >+ assert_false(host.dispatchEvent(event)); >+ assert_equals(event.target, null); >+ assert_equals(event.relatedTarget, null); >+ // Check that the dispatch flag is cleared >+ event.initEvent("x"); >+ assert_equals(event.type, "x"); >+}, "Reset targets on early return"); >+ >+test(t => { >+ const input = document.body.appendChild(document.createElement("input")), >+ event = new MouseEvent("click", { relatedTarget: shadow }); >+ let seen = false; >+ t.add_cleanup(() => input.remove()); >+ input.type = "checkbox"; >+ input.oninput = t.step_func(() => { >+ assert_equals(event.target, null); >+ assert_equals(event.relatedTarget, null); >+ assert_equals(event.composedPath().length, 0); >+ seen = true; >+ }); >+ assert_true(input.dispatchEvent(event)); >+ assert_true(seen); >+}, "Reset targets before activation behavior"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log >index 8ac29d925aae57b781faa7c8d2712e2778c6448f..d5ede7ff198fcf7c99f7e00e82c1b39ee72645f2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/events/w3c-import.log >@@ -62,3 +62,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/events/EventTarget-dispatchEvent.html > /LayoutTests/imported/w3c/web-platform-tests/dom/events/EventTarget-removeEventListener.html > /LayoutTests/imported/w3c/web-platform-tests/dom/events/event-disabled-dynamic.html >+/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global.worker.js >+/LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/historical-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/historical-expected.txt >index 8071f1f4b77f26c74fc92fb59ce36e6c279238df..0a9702011e03b1b0cb3766ab91a3c1e429904226 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/historical-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/historical-expected.txt >@@ -1,11 +1,13 @@ > > PASS Historical DOM features must be removed: DOMConfiguration >+PASS Historical DOM features must be removed: DOMCursor > PASS Historical DOM features must be removed: DOMError > PASS Historical DOM features must be removed: DOMErrorHandler > PASS Historical DOM features must be removed: DOMImplementationList > PASS Historical DOM features must be removed: DOMImplementationSource > PASS Historical DOM features must be removed: DOMLocator > PASS Historical DOM features must be removed: DOMObject >+PASS Historical DOM features must be removed: DOMRequest > PASS Historical DOM features must be removed: DOMSettableTokenList > PASS Historical DOM features must be removed: DOMUserData > PASS Historical DOM features must be removed: Entity >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/historical.html b/LayoutTests/imported/w3c/web-platform-tests/dom/historical.html >index 388366c084c09c54608a9cc24357e2b9f5578708..b45bebfb662d4e393f5ddf2ba580d541b865e815 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/historical.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/historical.html >@@ -12,12 +12,14 @@ function isInterfaceNuked(name) { > } > var nukedInterfaces = [ > "DOMConfiguration", >+ "DOMCursor", > "DOMError", > "DOMErrorHandler", > "DOMImplementationList", > "DOMImplementationSource", > "DOMLocator", > "DOMObject", >+ "DOMRequest", > "DOMSettableTokenList", > "DOMUserData", > "Entity", >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt >index 44531be5ded3af31ba409ae569b8319448422285..9fc109460d1947e0905defbaf6bb54c85c78a6b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt >@@ -1,1978 +1,6 @@ > CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported >-CONSOLE MESSAGE: line 331: callback not yet supported > DOM IDL tests > > >-PASS Test driver >-PASS WorkerGlobalScope interface: existence and properties of interface object >-PASS DedicatedWorkerGlobalScope interface: existence and properties of interface object >-PASS SharedWorkerGlobalScope interface: existence and properties of interface object >-PASS WorkerNavigator interface: existence and properties of interface object >-PASS WorkerLocation interface: existence and properties of interface object >-PASS Event interface: existence and properties of interface object >-PASS Event interface object length >-PASS Event interface object name >-PASS Event interface: existence and properties of interface prototype object >-PASS Event interface: existence and properties of interface prototype object's "constructor" property >-PASS Event interface: existence and properties of interface prototype object's @@unscopables property >-PASS Event interface: attribute type >-PASS Unscopable handled correctly for type property on Event >-PASS Event interface: attribute target >-PASS Unscopable handled correctly for target property on Event >-PASS Event interface: attribute srcElement >-PASS Unscopable handled correctly for srcElement property on Event >-PASS Event interface: attribute currentTarget >-PASS Unscopable handled correctly for currentTarget property on Event >-PASS Event interface: constant NONE on interface object >-PASS Event interface: constant NONE on interface prototype object >-PASS Event interface: constant CAPTURING_PHASE on interface object >-PASS Event interface: constant CAPTURING_PHASE on interface prototype object >-PASS Event interface: constant AT_TARGET on interface object >-PASS Event interface: constant AT_TARGET on interface prototype object >-PASS Event interface: constant BUBBLING_PHASE on interface object >-PASS Event interface: constant BUBBLING_PHASE on interface prototype object >-PASS Event interface: attribute eventPhase >-PASS Unscopable handled correctly for eventPhase property on Event >-PASS Event interface: operation stopPropagation() >-PASS Unscopable handled correctly for stopPropagation() on Event >-PASS Event interface: operation stopImmediatePropagation() >-PASS Unscopable handled correctly for stopImmediatePropagation() on Event >-PASS Event interface: attribute bubbles >-PASS Unscopable handled correctly for bubbles property on Event >-PASS Event interface: attribute cancelable >-PASS Unscopable handled correctly for cancelable property on Event >-PASS Event interface: attribute returnValue >-PASS Unscopable handled correctly for returnValue property on Event >-PASS Event interface: operation preventDefault() >-PASS Unscopable handled correctly for preventDefault() on Event >-PASS Event interface: attribute defaultPrevented >-PASS Unscopable handled correctly for defaultPrevented property on Event >-PASS Event interface: attribute timeStamp >-PASS Unscopable handled correctly for timeStamp property on Event >-PASS Event interface: operation initEvent(DOMString, boolean, boolean) >-PASS Unscopable handled correctly for initEvent(DOMString, boolean, boolean) on Event >-PASS Event must be primary interface of document.createEvent("Event") >-PASS Stringification of document.createEvent("Event") >-PASS Event interface: document.createEvent("Event") must inherit property "type" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "target" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "srcElement" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "currentTarget" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "NONE" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "CAPTURING_PHASE" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "AT_TARGET" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "BUBBLING_PHASE" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "eventPhase" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "stopPropagation()" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "stopImmediatePropagation()" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "bubbles" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "cancelable" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "returnValue" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "preventDefault()" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "defaultPrevented" with the proper type >-PASS Event interface: document.createEvent("Event") must have own property "isTrusted" >-PASS Event interface: document.createEvent("Event") must inherit property "timeStamp" with the proper type >-PASS Event interface: document.createEvent("Event") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type >-PASS Event interface: calling initEvent(DOMString, boolean, boolean) on document.createEvent("Event") with too few arguments must throw TypeError >-PASS Event must be primary interface of new Event("foo") >-PASS Stringification of new Event("foo") >-PASS Event interface: new Event("foo") must inherit property "type" with the proper type >-PASS Event interface: new Event("foo") must inherit property "target" with the proper type >-PASS Event interface: new Event("foo") must inherit property "srcElement" with the proper type >-PASS Event interface: new Event("foo") must inherit property "currentTarget" with the proper type >-PASS Event interface: new Event("foo") must inherit property "NONE" with the proper type >-PASS Event interface: new Event("foo") must inherit property "CAPTURING_PHASE" with the proper type >-PASS Event interface: new Event("foo") must inherit property "AT_TARGET" with the proper type >-PASS Event interface: new Event("foo") must inherit property "BUBBLING_PHASE" with the proper type >-PASS Event interface: new Event("foo") must inherit property "eventPhase" with the proper type >-PASS Event interface: new Event("foo") must inherit property "stopPropagation()" with the proper type >-PASS Event interface: new Event("foo") must inherit property "stopImmediatePropagation()" with the proper type >-PASS Event interface: new Event("foo") must inherit property "bubbles" with the proper type >-PASS Event interface: new Event("foo") must inherit property "cancelable" with the proper type >-PASS Event interface: new Event("foo") must inherit property "returnValue" with the proper type >-PASS Event interface: new Event("foo") must inherit property "preventDefault()" with the proper type >-PASS Event interface: new Event("foo") must inherit property "defaultPrevented" with the proper type >-PASS Event interface: new Event("foo") must have own property "isTrusted" >-PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type >-PASS Event interface: new Event("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type >-PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new Event("foo") with too few arguments must throw TypeError >-PASS CustomEvent interface: existence and properties of interface object >-PASS CustomEvent interface object length >-PASS CustomEvent interface object name >-PASS CustomEvent interface: existence and properties of interface prototype object >-PASS CustomEvent interface: existence and properties of interface prototype object's "constructor" property >-PASS CustomEvent interface: existence and properties of interface prototype object's @@unscopables property >-PASS CustomEvent interface: attribute detail >-PASS Unscopable handled correctly for detail property on CustomEvent >-PASS CustomEvent interface: operation initCustomEvent(DOMString, boolean, boolean, any) >-PASS Unscopable handled correctly for initCustomEvent(DOMString, boolean, boolean, any) on CustomEvent >-PASS CustomEvent must be primary interface of new CustomEvent("foo") >-PASS Stringification of new CustomEvent("foo") >-PASS CustomEvent interface: new CustomEvent("foo") must inherit property "detail" with the proper type >-PASS CustomEvent interface: new CustomEvent("foo") must inherit property "initCustomEvent(DOMString, boolean, boolean, any)" with the proper type >-PASS CustomEvent interface: calling initCustomEvent(DOMString, boolean, boolean, any) on new CustomEvent("foo") with too few arguments must throw TypeError >-PASS Event interface: new CustomEvent("foo") must inherit property "type" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "target" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "srcElement" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "currentTarget" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "NONE" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "CAPTURING_PHASE" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "AT_TARGET" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "BUBBLING_PHASE" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "eventPhase" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "stopPropagation()" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "stopImmediatePropagation()" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "bubbles" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "cancelable" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "returnValue" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "preventDefault()" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "defaultPrevented" with the proper type >-PASS Event interface: new CustomEvent("foo") must have own property "isTrusted" >-PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type >-PASS Event interface: new CustomEvent("foo") must inherit property "initEvent(DOMString, boolean, boolean)" with the proper type >-PASS Event interface: calling initEvent(DOMString, boolean, boolean) on new CustomEvent("foo") with too few arguments must throw TypeError >-PASS EventTarget interface: existence and properties of interface object >-PASS EventTarget interface object length >-PASS EventTarget interface object name >-PASS EventTarget interface: existence and properties of interface prototype object >-PASS EventTarget interface: existence and properties of interface prototype object's "constructor" property >-PASS EventTarget interface: existence and properties of interface prototype object's @@unscopables property >-PASS EventTarget interface: operation addEventListener(DOMString, EventListener, [object Object],[object Object]) >-PASS Unscopable handled correctly for addEventListener(DOMString, EventListener, [object Object],[object Object]) on EventTarget >-PASS EventTarget interface: operation removeEventListener(DOMString, EventListener, [object Object],[object Object]) >-PASS Unscopable handled correctly for removeEventListener(DOMString, EventListener, [object Object],[object Object]) on EventTarget >-PASS EventTarget interface: operation dispatchEvent(Event) >-PASS Unscopable handled correctly for dispatchEvent(Event) on EventTarget >-FAIL EventTarget must be primary interface of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL Stringification of new EventTarget() assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: new EventTarget() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: new EventTarget() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: new EventTarget() must inherit property "dispatchEvent(Event)" with the proper type assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-FAIL EventTarget interface: calling dispatchEvent(Event) on new EventTarget() with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "TypeError: function is not a constructor (evaluating 'new EventTarget()')" >-PASS EventListener interface: existence and properties of interface object >-PASS EventListener interface: existence and properties of interface prototype object >-PASS EventListener interface: existence and properties of interface prototype object's "constructor" property >-PASS EventListener interface: existence and properties of interface prototype object's @@unscopables property >-PASS EventListener interface: operation handleEvent(Event) >-PASS Unscopable handled correctly for handleEvent(Event) on EventListener >-PASS AbortController interface: existence and properties of interface object >-PASS AbortController interface object length >-PASS AbortController interface object name >-PASS AbortController interface: existence and properties of interface prototype object >-PASS AbortController interface: existence and properties of interface prototype object's "constructor" property >-PASS AbortController interface: existence and properties of interface prototype object's @@unscopables property >-PASS AbortController interface: attribute signal >-PASS Unscopable handled correctly for signal property on AbortController >-PASS AbortController interface: operation abort() >-PASS Unscopable handled correctly for abort() on AbortController >-PASS AbortController must be primary interface of new AbortController() >-PASS Stringification of new AbortController() >-PASS AbortController interface: new AbortController() must inherit property "signal" with the proper type >-PASS AbortController interface: new AbortController() must inherit property "abort()" with the proper type >-PASS AbortSignal interface: existence and properties of interface object >-PASS AbortSignal interface object length >-PASS AbortSignal interface object name >-PASS AbortSignal interface: existence and properties of interface prototype object >-PASS AbortSignal interface: existence and properties of interface prototype object's "constructor" property >-PASS AbortSignal interface: existence and properties of interface prototype object's @@unscopables property >-PASS AbortSignal interface: attribute aborted >-PASS Unscopable handled correctly for aborted property on AbortSignal >-PASS AbortSignal interface: attribute onabort >-PASS Unscopable handled correctly for onabort property on AbortSignal >-PASS AbortSignal must be primary interface of new AbortController().signal >-PASS Stringification of new AbortController().signal >-PASS AbortSignal interface: new AbortController().signal must inherit property "aborted" with the proper type >-PASS AbortSignal interface: new AbortController().signal must inherit property "onabort" with the proper type >-PASS EventTarget interface: new AbortController().signal must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError >-PASS EventTarget interface: new AbortController().signal must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new AbortController().signal with too few arguments must throw TypeError >-PASS EventTarget interface: new AbortController().signal must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on new AbortController().signal with too few arguments must throw TypeError >-PASS NodeList interface: existence and properties of interface object >-PASS NodeList interface object length >-PASS NodeList interface object name >-PASS NodeList interface: existence and properties of interface prototype object >-PASS NodeList interface: existence and properties of interface prototype object's "constructor" property >-PASS NodeList interface: existence and properties of interface prototype object's @@unscopables property >-PASS NodeList interface: operation item(unsigned long) >-PASS Unscopable handled correctly for item(unsigned long) on NodeList >-PASS NodeList interface: attribute length >-PASS Unscopable handled correctly for length property on NodeList >-PASS NodeList must be primary interface of document.querySelectorAll("script") >-PASS Stringification of document.querySelectorAll("script") >-PASS NodeList interface: document.querySelectorAll("script") must inherit property "item(unsigned long)" with the proper type >-PASS NodeList interface: calling item(unsigned long) on document.querySelectorAll("script") with too few arguments must throw TypeError >-PASS NodeList interface: document.querySelectorAll("script") must inherit property "length" with the proper type >-PASS HTMLCollection interface: existence and properties of interface object >-PASS HTMLCollection interface object length >-PASS HTMLCollection interface object name >-PASS HTMLCollection interface: existence and properties of interface prototype object >-PASS HTMLCollection interface: existence and properties of interface prototype object's "constructor" property >-PASS HTMLCollection interface: existence and properties of interface prototype object's @@unscopables property >-PASS HTMLCollection interface: attribute length >-PASS Unscopable handled correctly for length property on HTMLCollection >-PASS HTMLCollection interface: operation item(unsigned long) >-PASS Unscopable handled correctly for item(unsigned long) on HTMLCollection >-PASS HTMLCollection interface: operation namedItem(DOMString) >-PASS Unscopable handled correctly for namedItem(DOMString) on HTMLCollection >-PASS HTMLCollection must be primary interface of document.body.children >-PASS Stringification of document.body.children >-PASS HTMLCollection interface: document.body.children must inherit property "length" with the proper type >-PASS HTMLCollection interface: document.body.children must inherit property "item(unsigned long)" with the proper type >-PASS HTMLCollection interface: calling item(unsigned long) on document.body.children with too few arguments must throw TypeError >-PASS HTMLCollection interface: document.body.children must inherit property "namedItem(DOMString)" with the proper type >-PASS HTMLCollection interface: calling namedItem(DOMString) on document.body.children with too few arguments must throw TypeError >-PASS MutationObserver interface: existence and properties of interface object >-PASS MutationObserver interface object length >-PASS MutationObserver interface object name >-PASS MutationObserver interface: existence and properties of interface prototype object >-PASS MutationObserver interface: existence and properties of interface prototype object's "constructor" property >-PASS MutationObserver interface: existence and properties of interface prototype object's @@unscopables property >-PASS MutationObserver interface: operation observe(Node, MutationObserverInit) >-PASS Unscopable handled correctly for observe(Node, MutationObserverInit) on MutationObserver >-PASS MutationObserver interface: operation disconnect() >-PASS Unscopable handled correctly for disconnect() on MutationObserver >-PASS MutationObserver interface: operation takeRecords() >-PASS Unscopable handled correctly for takeRecords() on MutationObserver >-PASS MutationRecord interface: existence and properties of interface object >-PASS MutationRecord interface object length >-PASS MutationRecord interface object name >-PASS MutationRecord interface: existence and properties of interface prototype object >-PASS MutationRecord interface: existence and properties of interface prototype object's "constructor" property >-PASS MutationRecord interface: existence and properties of interface prototype object's @@unscopables property >-PASS MutationRecord interface: attribute type >-PASS Unscopable handled correctly for type property on MutationRecord >-PASS MutationRecord interface: attribute target >-PASS Unscopable handled correctly for target property on MutationRecord >-PASS MutationRecord interface: attribute addedNodes >-PASS Unscopable handled correctly for addedNodes property on MutationRecord >-PASS MutationRecord interface: attribute removedNodes >-PASS Unscopable handled correctly for removedNodes property on MutationRecord >-PASS MutationRecord interface: attribute previousSibling >-PASS Unscopable handled correctly for previousSibling property on MutationRecord >-PASS MutationRecord interface: attribute nextSibling >-PASS Unscopable handled correctly for nextSibling property on MutationRecord >-PASS MutationRecord interface: attribute attributeName >-PASS Unscopable handled correctly for attributeName property on MutationRecord >-PASS MutationRecord interface: attribute attributeNamespace >-PASS Unscopable handled correctly for attributeNamespace property on MutationRecord >-PASS MutationRecord interface: attribute oldValue >-PASS Unscopable handled correctly for oldValue property on MutationRecord >-PASS Node interface: existence and properties of interface object >-PASS Node interface object length >-PASS Node interface object name >-PASS Node interface: existence and properties of interface prototype object >-PASS Node interface: existence and properties of interface prototype object's "constructor" property >-PASS Node interface: existence and properties of interface prototype object's @@unscopables property >-PASS Node interface: constant ELEMENT_NODE on interface object >-PASS Node interface: constant ELEMENT_NODE on interface prototype object >-PASS Node interface: constant ATTRIBUTE_NODE on interface object >-PASS Node interface: constant ATTRIBUTE_NODE on interface prototype object >-PASS Node interface: constant TEXT_NODE on interface object >-PASS Node interface: constant TEXT_NODE on interface prototype object >-PASS Node interface: constant CDATA_SECTION_NODE on interface object >-PASS Node interface: constant CDATA_SECTION_NODE on interface prototype object >-PASS Node interface: constant ENTITY_REFERENCE_NODE on interface object >-PASS Node interface: constant ENTITY_REFERENCE_NODE on interface prototype object >-PASS Node interface: constant ENTITY_NODE on interface object >-PASS Node interface: constant ENTITY_NODE on interface prototype object >-PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface object >-PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface prototype object >-PASS Node interface: constant COMMENT_NODE on interface object >-PASS Node interface: constant COMMENT_NODE on interface prototype object >-PASS Node interface: constant DOCUMENT_NODE on interface object >-PASS Node interface: constant DOCUMENT_NODE on interface prototype object >-PASS Node interface: constant DOCUMENT_TYPE_NODE on interface object >-PASS Node interface: constant DOCUMENT_TYPE_NODE on interface prototype object >-PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface object >-PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface prototype object >-PASS Node interface: constant NOTATION_NODE on interface object >-PASS Node interface: constant NOTATION_NODE on interface prototype object >-PASS Node interface: attribute nodeType >-PASS Unscopable handled correctly for nodeType property on Node >-PASS Node interface: attribute nodeName >-PASS Unscopable handled correctly for nodeName property on Node >-PASS Node interface: attribute baseURI >-PASS Unscopable handled correctly for baseURI property on Node >-PASS Node interface: attribute isConnected >-PASS Unscopable handled correctly for isConnected property on Node >-PASS Node interface: attribute ownerDocument >-PASS Unscopable handled correctly for ownerDocument property on Node >-PASS Node interface: operation getRootNode(GetRootNodeOptions) >-PASS Unscopable handled correctly for getRootNode(GetRootNodeOptions) on Node >-PASS Node interface: attribute parentNode >-PASS Unscopable handled correctly for parentNode property on Node >-PASS Node interface: attribute parentElement >-PASS Unscopable handled correctly for parentElement property on Node >-PASS Node interface: operation hasChildNodes() >-PASS Unscopable handled correctly for hasChildNodes() on Node >-PASS Node interface: attribute childNodes >-PASS Unscopable handled correctly for childNodes property on Node >-PASS Node interface: attribute firstChild >-PASS Unscopable handled correctly for firstChild property on Node >-PASS Node interface: attribute lastChild >-PASS Unscopable handled correctly for lastChild property on Node >-PASS Node interface: attribute previousSibling >-PASS Unscopable handled correctly for previousSibling property on Node >-PASS Node interface: attribute nextSibling >-PASS Unscopable handled correctly for nextSibling property on Node >-PASS Node interface: attribute nodeValue >-PASS Unscopable handled correctly for nodeValue property on Node >-PASS Node interface: attribute textContent >-PASS Unscopable handled correctly for textContent property on Node >-PASS Node interface: operation normalize() >-PASS Unscopable handled correctly for normalize() on Node >-PASS Node interface: operation cloneNode(boolean) >-PASS Unscopable handled correctly for cloneNode(boolean) on Node >-PASS Node interface: operation isEqualNode(Node) >-PASS Unscopable handled correctly for isEqualNode(Node) on Node >-PASS Node interface: operation isSameNode(Node) >-PASS Unscopable handled correctly for isSameNode(Node) on Node >-PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface object >-PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface prototype object >-PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface object >-PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface prototype object >-PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface object >-PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface prototype object >-PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface object >-PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface prototype object >-PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface object >-PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface prototype object >-PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface object >-PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface prototype object >-PASS Node interface: operation compareDocumentPosition(Node) >-PASS Unscopable handled correctly for compareDocumentPosition(Node) on Node >-PASS Node interface: operation contains(Node) >-PASS Unscopable handled correctly for contains(Node) on Node >-PASS Node interface: operation lookupPrefix(DOMString) >-PASS Unscopable handled correctly for lookupPrefix(DOMString) on Node >-PASS Node interface: operation lookupNamespaceURI(DOMString) >-PASS Unscopable handled correctly for lookupNamespaceURI(DOMString) on Node >-PASS Node interface: operation isDefaultNamespace(DOMString) >-PASS Unscopable handled correctly for isDefaultNamespace(DOMString) on Node >-PASS Node interface: operation insertBefore(Node, Node) >-PASS Unscopable handled correctly for insertBefore(Node, Node) on Node >-PASS Node interface: operation appendChild(Node) >-PASS Unscopable handled correctly for appendChild(Node) on Node >-PASS Node interface: operation replaceChild(Node, Node) >-PASS Unscopable handled correctly for replaceChild(Node, Node) on Node >-PASS Node interface: operation removeChild(Node) >-PASS Unscopable handled correctly for removeChild(Node) on Node >-PASS Document interface: existence and properties of interface object >-PASS Document interface object length >-PASS Document interface object name >-PASS Document interface: existence and properties of interface prototype object >-PASS Document interface: existence and properties of interface prototype object's "constructor" property >-PASS Document interface: existence and properties of interface prototype object's @@unscopables property >-PASS Document interface: attribute implementation >-PASS Unscopable handled correctly for implementation property on Document >-PASS Document interface: attribute URL >-PASS Unscopable handled correctly for URL property on Document >-PASS Document interface: attribute documentURI >-PASS Unscopable handled correctly for documentURI property on Document >-PASS Document interface: attribute origin >-PASS Unscopable handled correctly for origin property on Document >-PASS Document interface: attribute compatMode >-PASS Unscopable handled correctly for compatMode property on Document >-PASS Document interface: attribute characterSet >-PASS Unscopable handled correctly for characterSet property on Document >-PASS Document interface: attribute charset >-PASS Unscopable handled correctly for charset property on Document >-PASS Document interface: attribute inputEncoding >-PASS Unscopable handled correctly for inputEncoding property on Document >-PASS Document interface: attribute contentType >-PASS Unscopable handled correctly for contentType property on Document >-PASS Document interface: attribute doctype >-PASS Unscopable handled correctly for doctype property on Document >-PASS Document interface: attribute documentElement >-PASS Unscopable handled correctly for documentElement property on Document >-PASS Document interface: operation getElementsByTagName(DOMString) >-PASS Unscopable handled correctly for getElementsByTagName(DOMString) on Document >-PASS Document interface: operation getElementsByTagNameNS(DOMString, DOMString) >-PASS Unscopable handled correctly for getElementsByTagNameNS(DOMString, DOMString) on Document >-PASS Document interface: operation getElementsByClassName(DOMString) >-PASS Unscopable handled correctly for getElementsByClassName(DOMString) on Document >-PASS Document interface: operation createElement(DOMString, [object Object],[object Object]) >-PASS Unscopable handled correctly for createElement(DOMString, [object Object],[object Object]) on Document >-PASS Document interface: operation createElementNS(DOMString, DOMString, [object Object],[object Object]) >-PASS Unscopable handled correctly for createElementNS(DOMString, DOMString, [object Object],[object Object]) on Document >-PASS Document interface: operation createDocumentFragment() >-PASS Unscopable handled correctly for createDocumentFragment() on Document >-PASS Document interface: operation createTextNode(DOMString) >-PASS Unscopable handled correctly for createTextNode(DOMString) on Document >-PASS Document interface: operation createCDATASection(DOMString) >-PASS Unscopable handled correctly for createCDATASection(DOMString) on Document >-PASS Document interface: operation createComment(DOMString) >-PASS Unscopable handled correctly for createComment(DOMString) on Document >-PASS Document interface: operation createProcessingInstruction(DOMString, DOMString) >-PASS Unscopable handled correctly for createProcessingInstruction(DOMString, DOMString) on Document >-PASS Document interface: operation importNode(Node, boolean) >-PASS Unscopable handled correctly for importNode(Node, boolean) on Document >-PASS Document interface: operation adoptNode(Node) >-PASS Unscopable handled correctly for adoptNode(Node) on Document >-PASS Document interface: operation createAttribute(DOMString) >-PASS Unscopable handled correctly for createAttribute(DOMString) on Document >-PASS Document interface: operation createAttributeNS(DOMString, DOMString) >-PASS Unscopable handled correctly for createAttributeNS(DOMString, DOMString) on Document >-PASS Document interface: operation createEvent(DOMString) >-PASS Unscopable handled correctly for createEvent(DOMString) on Document >-PASS Document interface: operation createRange() >-PASS Unscopable handled correctly for createRange() on Document >-PASS Document interface: operation createNodeIterator(Node, unsigned long, NodeFilter) >-PASS Unscopable handled correctly for createNodeIterator(Node, unsigned long, NodeFilter) on Document >-PASS Document interface: operation createTreeWalker(Node, unsigned long, NodeFilter) >-PASS Unscopable handled correctly for createTreeWalker(Node, unsigned long, NodeFilter) on Document >-PASS Document interface: operation getElementById(DOMString) >-PASS Unscopable handled correctly for getElementById(DOMString) on Document >-PASS Document interface: attribute children >-PASS Unscopable handled correctly for children property on Document >-PASS Document interface: attribute firstElementChild >-PASS Unscopable handled correctly for firstElementChild property on Document >-PASS Document interface: attribute lastElementChild >-PASS Unscopable handled correctly for lastElementChild property on Document >-PASS Document interface: attribute childElementCount >-PASS Unscopable handled correctly for childElementCount property on Document >-PASS Document interface: operation prepend([object Object],[object Object]) >-PASS Unscopable handled correctly for prepend([object Object],[object Object]) on Document >-PASS Document interface: operation append([object Object],[object Object]) >-PASS Unscopable handled correctly for append([object Object],[object Object]) on Document >-PASS Document interface: operation querySelector(DOMString) >-PASS Unscopable handled correctly for querySelector(DOMString) on Document >-PASS Document interface: operation querySelectorAll(DOMString) >-PASS Unscopable handled correctly for querySelectorAll(DOMString) on Document >-PASS Document must be primary interface of new Document() >-PASS Stringification of new Document() >-PASS Document interface: new Document() must inherit property "implementation" with the proper type >-PASS Document interface: new Document() must inherit property "URL" with the proper type >-PASS Document interface: new Document() must inherit property "documentURI" with the proper type >-PASS Document interface: new Document() must inherit property "origin" with the proper type >-PASS Document interface: new Document() must inherit property "compatMode" with the proper type >-PASS Document interface: new Document() must inherit property "characterSet" with the proper type >-PASS Document interface: new Document() must inherit property "charset" with the proper type >-PASS Document interface: new Document() must inherit property "inputEncoding" with the proper type >-PASS Document interface: new Document() must inherit property "contentType" with the proper type >-PASS Document interface: new Document() must inherit property "doctype" with the proper type >-PASS Document interface: new Document() must inherit property "documentElement" with the proper type >-PASS Document interface: new Document() must inherit property "getElementsByTagName(DOMString)" with the proper type >-PASS Document interface: calling getElementsByTagName(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type >-PASS Document interface: calling getElementsByTagNameNS(DOMString, DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "getElementsByClassName(DOMString)" with the proper type >-PASS Document interface: calling getElementsByClassName(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createElement(DOMString, [object Object],[object Object])" with the proper type >-PASS Document interface: calling createElement(DOMString, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createElementNS(DOMString, DOMString, [object Object],[object Object])" with the proper type >-PASS Document interface: calling createElementNS(DOMString, DOMString, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createDocumentFragment()" with the proper type >-PASS Document interface: new Document() must inherit property "createTextNode(DOMString)" with the proper type >-PASS Document interface: calling createTextNode(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createCDATASection(DOMString)" with the proper type >-PASS Document interface: calling createCDATASection(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createComment(DOMString)" with the proper type >-PASS Document interface: calling createComment(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createProcessingInstruction(DOMString, DOMString)" with the proper type >-PASS Document interface: calling createProcessingInstruction(DOMString, DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "importNode(Node, boolean)" with the proper type >-PASS Document interface: calling importNode(Node, boolean) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "adoptNode(Node)" with the proper type >-PASS Document interface: calling adoptNode(Node) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createAttribute(DOMString)" with the proper type >-PASS Document interface: calling createAttribute(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createAttributeNS(DOMString, DOMString)" with the proper type >-PASS Document interface: calling createAttributeNS(DOMString, DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createEvent(DOMString)" with the proper type >-PASS Document interface: calling createEvent(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createRange()" with the proper type >-PASS Document interface: new Document() must inherit property "createNodeIterator(Node, unsigned long, NodeFilter)" with the proper type >-PASS Document interface: calling createNodeIterator(Node, unsigned long, NodeFilter) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "createTreeWalker(Node, unsigned long, NodeFilter)" with the proper type >-PASS Document interface: calling createTreeWalker(Node, unsigned long, NodeFilter) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "getElementById(DOMString)" with the proper type >-PASS Document interface: calling getElementById(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "children" with the proper type >-PASS Document interface: new Document() must inherit property "firstElementChild" with the proper type >-PASS Document interface: new Document() must inherit property "lastElementChild" with the proper type >-PASS Document interface: new Document() must inherit property "childElementCount" with the proper type >-PASS Document interface: new Document() must inherit property "prepend([object Object],[object Object])" with the proper type >-PASS Document interface: calling prepend([object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "append([object Object],[object Object])" with the proper type >-PASS Document interface: calling append([object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "querySelector(DOMString)" with the proper type >-PASS Document interface: calling querySelector(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Document interface: new Document() must inherit property "querySelectorAll(DOMString)" with the proper type >-PASS Document interface: calling querySelectorAll(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: new Document() must inherit property "nodeType" with the proper type >-PASS Node interface: new Document() must inherit property "nodeName" with the proper type >-PASS Node interface: new Document() must inherit property "baseURI" with the proper type >-PASS Node interface: new Document() must inherit property "isConnected" with the proper type >-PASS Node interface: new Document() must inherit property "ownerDocument" with the proper type >-PASS Node interface: new Document() must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "parentNode" with the proper type >-PASS Node interface: new Document() must inherit property "parentElement" with the proper type >-PASS Node interface: new Document() must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: new Document() must inherit property "childNodes" with the proper type >-PASS Node interface: new Document() must inherit property "firstChild" with the proper type >-PASS Node interface: new Document() must inherit property "lastChild" with the proper type >-PASS Node interface: new Document() must inherit property "previousSibling" with the proper type >-PASS Node interface: new Document() must inherit property "nextSibling" with the proper type >-PASS Node interface: new Document() must inherit property "nodeValue" with the proper type >-PASS Node interface: new Document() must inherit property "textContent" with the proper type >-PASS Node interface: new Document() must inherit property "normalize()" with the proper type >-PASS Node interface: new Document() must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: new Document() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: new Document() must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on new Document() with too few arguments must throw TypeError >-PASS Node interface: new Document() must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on new Document() with too few arguments must throw TypeError >-PASS EventTarget interface: new Document() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS EventTarget interface: new Document() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on new Document() with too few arguments must throw TypeError >-PASS EventTarget interface: new Document() must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on new Document() with too few arguments must throw TypeError >-PASS XMLDocument interface: existence and properties of interface object >-PASS XMLDocument interface object length >-PASS XMLDocument interface object name >-PASS XMLDocument interface: existence and properties of interface prototype object >-PASS XMLDocument interface: existence and properties of interface prototype object's "constructor" property >-PASS XMLDocument interface: existence and properties of interface prototype object's @@unscopables property >-PASS XMLDocument must be primary interface of xmlDoc >-PASS Stringification of xmlDoc >-PASS Document interface: xmlDoc must inherit property "implementation" with the proper type >-PASS Document interface: xmlDoc must inherit property "URL" with the proper type >-PASS Document interface: xmlDoc must inherit property "documentURI" with the proper type >-PASS Document interface: xmlDoc must inherit property "origin" with the proper type >-PASS Document interface: xmlDoc must inherit property "compatMode" with the proper type >-PASS Document interface: xmlDoc must inherit property "characterSet" with the proper type >-PASS Document interface: xmlDoc must inherit property "charset" with the proper type >-PASS Document interface: xmlDoc must inherit property "inputEncoding" with the proper type >-PASS Document interface: xmlDoc must inherit property "contentType" with the proper type >-PASS Document interface: xmlDoc must inherit property "doctype" with the proper type >-PASS Document interface: xmlDoc must inherit property "documentElement" with the proper type >-PASS Document interface: xmlDoc must inherit property "getElementsByTagName(DOMString)" with the proper type >-PASS Document interface: calling getElementsByTagName(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type >-PASS Document interface: calling getElementsByTagNameNS(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "getElementsByClassName(DOMString)" with the proper type >-PASS Document interface: calling getElementsByClassName(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createElement(DOMString, [object Object],[object Object])" with the proper type >-PASS Document interface: calling createElement(DOMString, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createElementNS(DOMString, DOMString, [object Object],[object Object])" with the proper type >-PASS Document interface: calling createElementNS(DOMString, DOMString, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createDocumentFragment()" with the proper type >-PASS Document interface: xmlDoc must inherit property "createTextNode(DOMString)" with the proper type >-PASS Document interface: calling createTextNode(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createCDATASection(DOMString)" with the proper type >-PASS Document interface: calling createCDATASection(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createComment(DOMString)" with the proper type >-PASS Document interface: calling createComment(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createProcessingInstruction(DOMString, DOMString)" with the proper type >-PASS Document interface: calling createProcessingInstruction(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "importNode(Node, boolean)" with the proper type >-PASS Document interface: calling importNode(Node, boolean) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "adoptNode(Node)" with the proper type >-PASS Document interface: calling adoptNode(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createAttribute(DOMString)" with the proper type >-PASS Document interface: calling createAttribute(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createAttributeNS(DOMString, DOMString)" with the proper type >-PASS Document interface: calling createAttributeNS(DOMString, DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createEvent(DOMString)" with the proper type >-PASS Document interface: calling createEvent(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createRange()" with the proper type >-PASS Document interface: xmlDoc must inherit property "createNodeIterator(Node, unsigned long, NodeFilter)" with the proper type >-PASS Document interface: calling createNodeIterator(Node, unsigned long, NodeFilter) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "createTreeWalker(Node, unsigned long, NodeFilter)" with the proper type >-PASS Document interface: calling createTreeWalker(Node, unsigned long, NodeFilter) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "getElementById(DOMString)" with the proper type >-PASS Document interface: calling getElementById(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "children" with the proper type >-PASS Document interface: xmlDoc must inherit property "firstElementChild" with the proper type >-PASS Document interface: xmlDoc must inherit property "lastElementChild" with the proper type >-PASS Document interface: xmlDoc must inherit property "childElementCount" with the proper type >-PASS Document interface: xmlDoc must inherit property "prepend([object Object],[object Object])" with the proper type >-PASS Document interface: calling prepend([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "append([object Object],[object Object])" with the proper type >-PASS Document interface: calling append([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "querySelector(DOMString)" with the proper type >-PASS Document interface: calling querySelector(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Document interface: xmlDoc must inherit property "querySelectorAll(DOMString)" with the proper type >-PASS Document interface: calling querySelectorAll(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: xmlDoc must inherit property "nodeType" with the proper type >-PASS Node interface: xmlDoc must inherit property "nodeName" with the proper type >-PASS Node interface: xmlDoc must inherit property "baseURI" with the proper type >-PASS Node interface: xmlDoc must inherit property "isConnected" with the proper type >-PASS Node interface: xmlDoc must inherit property "ownerDocument" with the proper type >-PASS Node interface: xmlDoc must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "parentNode" with the proper type >-PASS Node interface: xmlDoc must inherit property "parentElement" with the proper type >-PASS Node interface: xmlDoc must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: xmlDoc must inherit property "childNodes" with the proper type >-PASS Node interface: xmlDoc must inherit property "firstChild" with the proper type >-PASS Node interface: xmlDoc must inherit property "lastChild" with the proper type >-PASS Node interface: xmlDoc must inherit property "previousSibling" with the proper type >-PASS Node interface: xmlDoc must inherit property "nextSibling" with the proper type >-PASS Node interface: xmlDoc must inherit property "nodeValue" with the proper type >-PASS Node interface: xmlDoc must inherit property "textContent" with the proper type >-PASS Node interface: xmlDoc must inherit property "normalize()" with the proper type >-PASS Node interface: xmlDoc must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: xmlDoc must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on xmlDoc with too few arguments must throw TypeError >-PASS Node interface: xmlDoc must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on xmlDoc with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc with too few arguments must throw TypeError >-PASS DOMImplementation interface: existence and properties of interface object >-PASS DOMImplementation interface object length >-PASS DOMImplementation interface object name >-PASS DOMImplementation interface: existence and properties of interface prototype object >-PASS DOMImplementation interface: existence and properties of interface prototype object's "constructor" property >-PASS DOMImplementation interface: existence and properties of interface prototype object's @@unscopables property >-PASS DOMImplementation interface: operation createDocumentType(DOMString, DOMString, DOMString) >-PASS Unscopable handled correctly for createDocumentType(DOMString, DOMString, DOMString) on DOMImplementation >-PASS DOMImplementation interface: operation createDocument(DOMString, DOMString, DocumentType) >-PASS Unscopable handled correctly for createDocument(DOMString, DOMString, DocumentType) on DOMImplementation >-PASS DOMImplementation interface: operation createHTMLDocument(DOMString) >-PASS Unscopable handled correctly for createHTMLDocument(DOMString) on DOMImplementation >-PASS DOMImplementation interface: operation hasFeature() >-PASS Unscopable handled correctly for hasFeature() on DOMImplementation >-PASS DOMImplementation must be primary interface of document.implementation >-PASS Stringification of document.implementation >-PASS DOMImplementation interface: document.implementation must inherit property "createDocumentType(DOMString, DOMString, DOMString)" with the proper type >-PASS DOMImplementation interface: calling createDocumentType(DOMString, DOMString, DOMString) on document.implementation with too few arguments must throw TypeError >-PASS DOMImplementation interface: document.implementation must inherit property "createDocument(DOMString, DOMString, DocumentType)" with the proper type >-PASS DOMImplementation interface: calling createDocument(DOMString, DOMString, DocumentType) on document.implementation with too few arguments must throw TypeError >-PASS DOMImplementation interface: document.implementation must inherit property "createHTMLDocument(DOMString)" with the proper type >-PASS DOMImplementation interface: calling createHTMLDocument(DOMString) on document.implementation with too few arguments must throw TypeError >-PASS DOMImplementation interface: document.implementation must inherit property "hasFeature()" with the proper type >-PASS DocumentType interface: existence and properties of interface object >-PASS DocumentType interface object length >-PASS DocumentType interface object name >-PASS DocumentType interface: existence and properties of interface prototype object >-PASS DocumentType interface: existence and properties of interface prototype object's "constructor" property >-PASS DocumentType interface: existence and properties of interface prototype object's @@unscopables property >-PASS DocumentType interface: attribute name >-PASS Unscopable handled correctly for name property on DocumentType >-PASS DocumentType interface: attribute publicId >-PASS Unscopable handled correctly for publicId property on DocumentType >-PASS DocumentType interface: attribute systemId >-PASS Unscopable handled correctly for systemId property on DocumentType >-PASS DocumentType interface: operation before([object Object],[object Object]) >-PASS Unscopable handled correctly for before([object Object],[object Object]) on DocumentType >-PASS DocumentType interface: operation after([object Object],[object Object]) >-PASS Unscopable handled correctly for after([object Object],[object Object]) on DocumentType >-PASS DocumentType interface: operation replaceWith([object Object],[object Object]) >-PASS Unscopable handled correctly for replaceWith([object Object],[object Object]) on DocumentType >-PASS DocumentType interface: operation remove() >-PASS Unscopable handled correctly for remove() on DocumentType >-PASS DocumentType must be primary interface of document.doctype >-PASS Stringification of document.doctype >-PASS DocumentType interface: document.doctype must inherit property "name" with the proper type >-PASS DocumentType interface: document.doctype must inherit property "publicId" with the proper type >-PASS DocumentType interface: document.doctype must inherit property "systemId" with the proper type >-PASS DocumentType interface: document.doctype must inherit property "before([object Object],[object Object])" with the proper type >-PASS DocumentType interface: calling before([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError >-PASS DocumentType interface: document.doctype must inherit property "after([object Object],[object Object])" with the proper type >-PASS DocumentType interface: calling after([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError >-PASS DocumentType interface: document.doctype must inherit property "replaceWith([object Object],[object Object])" with the proper type >-PASS DocumentType interface: calling replaceWith([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError >-PASS DocumentType interface: document.doctype must inherit property "remove()" with the proper type >-PASS Node interface: document.doctype must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: document.doctype must inherit property "nodeType" with the proper type >-PASS Node interface: document.doctype must inherit property "nodeName" with the proper type >-PASS Node interface: document.doctype must inherit property "baseURI" with the proper type >-PASS Node interface: document.doctype must inherit property "isConnected" with the proper type >-PASS Node interface: document.doctype must inherit property "ownerDocument" with the proper type >-PASS Node interface: document.doctype must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "parentNode" with the proper type >-PASS Node interface: document.doctype must inherit property "parentElement" with the proper type >-PASS Node interface: document.doctype must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: document.doctype must inherit property "childNodes" with the proper type >-PASS Node interface: document.doctype must inherit property "firstChild" with the proper type >-PASS Node interface: document.doctype must inherit property "lastChild" with the proper type >-PASS Node interface: document.doctype must inherit property "previousSibling" with the proper type >-PASS Node interface: document.doctype must inherit property "nextSibling" with the proper type >-PASS Node interface: document.doctype must inherit property "nodeValue" with the proper type >-PASS Node interface: document.doctype must inherit property "textContent" with the proper type >-PASS Node interface: document.doctype must inherit property "normalize()" with the proper type >-PASS Node interface: document.doctype must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: document.doctype must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on document.doctype with too few arguments must throw TypeError >-PASS Node interface: document.doctype must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on document.doctype with too few arguments must throw TypeError >-PASS EventTarget interface: document.doctype must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.doctype with too few arguments must throw TypeError >-PASS EventTarget interface: document.doctype must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.doctype with too few arguments must throw TypeError >-PASS EventTarget interface: document.doctype must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on document.doctype with too few arguments must throw TypeError >-PASS DocumentFragment interface: existence and properties of interface object >-PASS DocumentFragment interface object length >-PASS DocumentFragment interface object name >-PASS DocumentFragment interface: existence and properties of interface prototype object >-PASS DocumentFragment interface: existence and properties of interface prototype object's "constructor" property >-PASS DocumentFragment interface: existence and properties of interface prototype object's @@unscopables property >-PASS DocumentFragment interface: operation getElementById(DOMString) >-PASS Unscopable handled correctly for getElementById(DOMString) on DocumentFragment >-PASS DocumentFragment interface: attribute children >-PASS Unscopable handled correctly for children property on DocumentFragment >-PASS DocumentFragment interface: attribute firstElementChild >-PASS Unscopable handled correctly for firstElementChild property on DocumentFragment >-PASS DocumentFragment interface: attribute lastElementChild >-PASS Unscopable handled correctly for lastElementChild property on DocumentFragment >-PASS DocumentFragment interface: attribute childElementCount >-PASS Unscopable handled correctly for childElementCount property on DocumentFragment >-PASS DocumentFragment interface: operation prepend([object Object],[object Object]) >-PASS Unscopable handled correctly for prepend([object Object],[object Object]) on DocumentFragment >-PASS DocumentFragment interface: operation append([object Object],[object Object]) >-PASS Unscopable handled correctly for append([object Object],[object Object]) on DocumentFragment >-PASS DocumentFragment interface: operation querySelector(DOMString) >-PASS Unscopable handled correctly for querySelector(DOMString) on DocumentFragment >-PASS DocumentFragment interface: operation querySelectorAll(DOMString) >-PASS Unscopable handled correctly for querySelectorAll(DOMString) on DocumentFragment >-PASS DocumentFragment must be primary interface of document.createDocumentFragment() >-PASS Stringification of document.createDocumentFragment() >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "getElementById(DOMString)" with the proper type >-PASS DocumentFragment interface: calling getElementById(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "children" with the proper type >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "firstElementChild" with the proper type >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "lastElementChild" with the proper type >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "childElementCount" with the proper type >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "prepend([object Object],[object Object])" with the proper type >-PASS DocumentFragment interface: calling prepend([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "append([object Object],[object Object])" with the proper type >-PASS DocumentFragment interface: calling append([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelector(DOMString)" with the proper type >-PASS DocumentFragment interface: calling querySelector(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelectorAll(DOMString)" with the proper type >-PASS DocumentFragment interface: calling querySelectorAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "nodeType" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "nodeName" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "baseURI" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "isConnected" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "ownerDocument" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "parentNode" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "parentElement" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "childNodes" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "firstChild" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "lastChild" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "previousSibling" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "nextSibling" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "nodeValue" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "textContent" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "normalize()" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: document.createDocumentFragment() must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS Node interface: document.createDocumentFragment() must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS EventTarget interface: document.createDocumentFragment() must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS EventTarget interface: document.createDocumentFragment() must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS EventTarget interface: document.createDocumentFragment() must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on document.createDocumentFragment() with too few arguments must throw TypeError >-PASS ShadowRoot interface: existence and properties of interface object >-PASS ShadowRoot interface object length >-PASS ShadowRoot interface object name >-PASS ShadowRoot interface: existence and properties of interface prototype object >-PASS ShadowRoot interface: existence and properties of interface prototype object's "constructor" property >-PASS ShadowRoot interface: existence and properties of interface prototype object's @@unscopables property >-PASS ShadowRoot interface: attribute mode >-PASS Unscopable handled correctly for mode property on ShadowRoot >-PASS ShadowRoot interface: attribute host >-PASS Unscopable handled correctly for host property on ShadowRoot >-PASS Element interface: existence and properties of interface object >-PASS Element interface object length >-PASS Element interface object name >-PASS Element interface: existence and properties of interface prototype object >-PASS Element interface: existence and properties of interface prototype object's "constructor" property >-PASS Element interface: existence and properties of interface prototype object's @@unscopables property >-PASS Element interface: attribute namespaceURI >-PASS Unscopable handled correctly for namespaceURI property on Element >-PASS Element interface: attribute prefix >-PASS Unscopable handled correctly for prefix property on Element >-PASS Element interface: attribute localName >-PASS Unscopable handled correctly for localName property on Element >-PASS Element interface: attribute tagName >-PASS Unscopable handled correctly for tagName property on Element >-PASS Element interface: attribute id >-PASS Unscopable handled correctly for id property on Element >-PASS Element interface: attribute className >-PASS Unscopable handled correctly for className property on Element >-PASS Element interface: attribute classList >-PASS Unscopable handled correctly for classList property on Element >-PASS Element interface: attribute slot >-PASS Unscopable handled correctly for slot property on Element >-PASS Element interface: operation hasAttributes() >-PASS Unscopable handled correctly for hasAttributes() on Element >-PASS Element interface: attribute attributes >-PASS Unscopable handled correctly for attributes property on Element >-PASS Element interface: operation getAttributeNames() >-PASS Unscopable handled correctly for getAttributeNames() on Element >-PASS Element interface: operation getAttribute(DOMString) >-PASS Unscopable handled correctly for getAttribute(DOMString) on Element >-PASS Element interface: operation getAttributeNS(DOMString, DOMString) >-PASS Unscopable handled correctly for getAttributeNS(DOMString, DOMString) on Element >-PASS Element interface: operation setAttribute(DOMString, DOMString) >-PASS Unscopable handled correctly for setAttribute(DOMString, DOMString) on Element >-PASS Element interface: operation setAttributeNS(DOMString, DOMString, DOMString) >-PASS Unscopable handled correctly for setAttributeNS(DOMString, DOMString, DOMString) on Element >-PASS Element interface: operation removeAttribute(DOMString) >-PASS Unscopable handled correctly for removeAttribute(DOMString) on Element >-PASS Element interface: operation removeAttributeNS(DOMString, DOMString) >-PASS Unscopable handled correctly for removeAttributeNS(DOMString, DOMString) on Element >-PASS Element interface: operation hasAttribute(DOMString) >-PASS Unscopable handled correctly for hasAttribute(DOMString) on Element >-PASS Element interface: operation hasAttributeNS(DOMString, DOMString) >-PASS Unscopable handled correctly for hasAttributeNS(DOMString, DOMString) on Element >-PASS Element interface: operation getAttributeNode(DOMString) >-PASS Unscopable handled correctly for getAttributeNode(DOMString) on Element >-PASS Element interface: operation getAttributeNodeNS(DOMString, DOMString) >-PASS Unscopable handled correctly for getAttributeNodeNS(DOMString, DOMString) on Element >-PASS Element interface: operation setAttributeNode(Attr) >-PASS Unscopable handled correctly for setAttributeNode(Attr) on Element >-PASS Element interface: operation setAttributeNodeNS(Attr) >-PASS Unscopable handled correctly for setAttributeNodeNS(Attr) on Element >-PASS Element interface: operation removeAttributeNode(Attr) >-PASS Unscopable handled correctly for removeAttributeNode(Attr) on Element >-PASS Element interface: operation attachShadow(ShadowRootInit) >-PASS Unscopable handled correctly for attachShadow(ShadowRootInit) on Element >-PASS Element interface: attribute shadowRoot >-PASS Unscopable handled correctly for shadowRoot property on Element >-PASS Element interface: operation closest(DOMString) >-PASS Unscopable handled correctly for closest(DOMString) on Element >-PASS Element interface: operation matches(DOMString) >-PASS Unscopable handled correctly for matches(DOMString) on Element >-PASS Element interface: operation webkitMatchesSelector(DOMString) >-PASS Unscopable handled correctly for webkitMatchesSelector(DOMString) on Element >-PASS Element interface: operation getElementsByTagName(DOMString) >-PASS Unscopable handled correctly for getElementsByTagName(DOMString) on Element >-PASS Element interface: operation getElementsByTagNameNS(DOMString, DOMString) >-PASS Unscopable handled correctly for getElementsByTagNameNS(DOMString, DOMString) on Element >-PASS Element interface: operation getElementsByClassName(DOMString) >-PASS Unscopable handled correctly for getElementsByClassName(DOMString) on Element >-PASS Element interface: operation insertAdjacentElement(DOMString, Element) >-PASS Unscopable handled correctly for insertAdjacentElement(DOMString, Element) on Element >-PASS Element interface: operation insertAdjacentText(DOMString, DOMString) >-PASS Unscopable handled correctly for insertAdjacentText(DOMString, DOMString) on Element >-PASS Element interface: attribute children >-PASS Unscopable handled correctly for children property on Element >-PASS Element interface: attribute firstElementChild >-PASS Unscopable handled correctly for firstElementChild property on Element >-PASS Element interface: attribute lastElementChild >-PASS Unscopable handled correctly for lastElementChild property on Element >-PASS Element interface: attribute childElementCount >-PASS Unscopable handled correctly for childElementCount property on Element >-PASS Element interface: operation prepend([object Object],[object Object]) >-PASS Unscopable handled correctly for prepend([object Object],[object Object]) on Element >-PASS Element interface: operation append([object Object],[object Object]) >-PASS Unscopable handled correctly for append([object Object],[object Object]) on Element >-PASS Element interface: operation querySelector(DOMString) >-PASS Unscopable handled correctly for querySelector(DOMString) on Element >-PASS Element interface: operation querySelectorAll(DOMString) >-PASS Unscopable handled correctly for querySelectorAll(DOMString) on Element >-PASS Element interface: attribute previousElementSibling >-PASS Unscopable handled correctly for previousElementSibling property on Element >-PASS Element interface: attribute nextElementSibling >-PASS Unscopable handled correctly for nextElementSibling property on Element >-PASS Element interface: operation before([object Object],[object Object]) >-PASS Unscopable handled correctly for before([object Object],[object Object]) on Element >-PASS Element interface: operation after([object Object],[object Object]) >-PASS Unscopable handled correctly for after([object Object],[object Object]) on Element >-PASS Element interface: operation replaceWith([object Object],[object Object]) >-PASS Unscopable handled correctly for replaceWith([object Object],[object Object]) on Element >-PASS Element interface: operation remove() >-PASS Unscopable handled correctly for remove() on Element >-PASS Element interface: attribute assignedSlot >-PASS Unscopable handled correctly for assignedSlot property on Element >-PASS Element must be primary interface of element >-PASS Stringification of element >-PASS Element interface: element must inherit property "namespaceURI" with the proper type >-PASS Element interface: element must inherit property "prefix" with the proper type >-PASS Element interface: element must inherit property "localName" with the proper type >-PASS Element interface: element must inherit property "tagName" with the proper type >-PASS Element interface: element must inherit property "id" with the proper type >-PASS Element interface: element must inherit property "className" with the proper type >-PASS Element interface: element must inherit property "classList" with the proper type >-PASS Element interface: element must inherit property "slot" with the proper type >-PASS Element interface: element must inherit property "hasAttributes()" with the proper type >-PASS Element interface: element must inherit property "attributes" with the proper type >-PASS Element interface: element must inherit property "getAttributeNames()" with the proper type >-PASS Element interface: element must inherit property "getAttribute(DOMString)" with the proper type >-PASS Element interface: calling getAttribute(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getAttributeNS(DOMString, DOMString)" with the proper type >-PASS Element interface: calling getAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "setAttribute(DOMString, DOMString)" with the proper type >-PASS Element interface: calling setAttribute(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "setAttributeNS(DOMString, DOMString, DOMString)" with the proper type >-PASS Element interface: calling setAttributeNS(DOMString, DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "removeAttribute(DOMString)" with the proper type >-PASS Element interface: calling removeAttribute(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "removeAttributeNS(DOMString, DOMString)" with the proper type >-PASS Element interface: calling removeAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "hasAttribute(DOMString)" with the proper type >-PASS Element interface: calling hasAttribute(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "hasAttributeNS(DOMString, DOMString)" with the proper type >-PASS Element interface: calling hasAttributeNS(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getAttributeNode(DOMString)" with the proper type >-PASS Element interface: calling getAttributeNode(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getAttributeNodeNS(DOMString, DOMString)" with the proper type >-PASS Element interface: calling getAttributeNodeNS(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "setAttributeNode(Attr)" with the proper type >-PASS Element interface: calling setAttributeNode(Attr) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "setAttributeNodeNS(Attr)" with the proper type >-PASS Element interface: calling setAttributeNodeNS(Attr) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "removeAttributeNode(Attr)" with the proper type >-PASS Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "attachShadow(ShadowRootInit)" with the proper type >-PASS Element interface: calling attachShadow(ShadowRootInit) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "shadowRoot" with the proper type >-PASS Element interface: element must inherit property "closest(DOMString)" with the proper type >-PASS Element interface: calling closest(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "matches(DOMString)" with the proper type >-PASS Element interface: calling matches(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "webkitMatchesSelector(DOMString)" with the proper type >-PASS Element interface: calling webkitMatchesSelector(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getElementsByTagName(DOMString)" with the proper type >-PASS Element interface: calling getElementsByTagName(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getElementsByTagNameNS(DOMString, DOMString)" with the proper type >-PASS Element interface: calling getElementsByTagNameNS(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "getElementsByClassName(DOMString)" with the proper type >-PASS Element interface: calling getElementsByClassName(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "insertAdjacentElement(DOMString, Element)" with the proper type >-PASS Element interface: calling insertAdjacentElement(DOMString, Element) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "insertAdjacentText(DOMString, DOMString)" with the proper type >-PASS Element interface: calling insertAdjacentText(DOMString, DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "children" with the proper type >-PASS Element interface: element must inherit property "firstElementChild" with the proper type >-PASS Element interface: element must inherit property "lastElementChild" with the proper type >-PASS Element interface: element must inherit property "childElementCount" with the proper type >-PASS Element interface: element must inherit property "prepend([object Object],[object Object])" with the proper type >-PASS Element interface: calling prepend([object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "append([object Object],[object Object])" with the proper type >-PASS Element interface: calling append([object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "querySelector(DOMString)" with the proper type >-PASS Element interface: calling querySelector(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "querySelectorAll(DOMString)" with the proper type >-PASS Element interface: calling querySelectorAll(DOMString) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "previousElementSibling" with the proper type >-PASS Element interface: element must inherit property "nextElementSibling" with the proper type >-PASS Element interface: element must inherit property "before([object Object],[object Object])" with the proper type >-PASS Element interface: calling before([object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "after([object Object],[object Object])" with the proper type >-PASS Element interface: calling after([object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "replaceWith([object Object],[object Object])" with the proper type >-PASS Element interface: calling replaceWith([object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS Element interface: element must inherit property "remove()" with the proper type >-PASS Element interface: element must inherit property "assignedSlot" with the proper type >-PASS Node interface: element must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: element must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: element must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: element must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: element must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: element must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: element must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: element must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: element must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: element must inherit property "nodeType" with the proper type >-PASS Node interface: element must inherit property "nodeName" with the proper type >-PASS Node interface: element must inherit property "baseURI" with the proper type >-PASS Node interface: element must inherit property "isConnected" with the proper type >-PASS Node interface: element must inherit property "ownerDocument" with the proper type >-PASS Node interface: element must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "parentNode" with the proper type >-PASS Node interface: element must inherit property "parentElement" with the proper type >-PASS Node interface: element must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: element must inherit property "childNodes" with the proper type >-PASS Node interface: element must inherit property "firstChild" with the proper type >-PASS Node interface: element must inherit property "lastChild" with the proper type >-PASS Node interface: element must inherit property "previousSibling" with the proper type >-PASS Node interface: element must inherit property "nextSibling" with the proper type >-PASS Node interface: element must inherit property "nodeValue" with the proper type >-PASS Node interface: element must inherit property "textContent" with the proper type >-PASS Node interface: element must inherit property "normalize()" with the proper type >-PASS Node interface: element must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: element must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: element must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on element with too few arguments must throw TypeError >-PASS Node interface: element must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on element with too few arguments must throw TypeError >-PASS EventTarget interface: element must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS EventTarget interface: element must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on element with too few arguments must throw TypeError >-PASS EventTarget interface: element must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on element with too few arguments must throw TypeError >-PASS NamedNodeMap interface: existence and properties of interface object >-PASS NamedNodeMap interface object length >-PASS NamedNodeMap interface object name >-PASS NamedNodeMap interface: existence and properties of interface prototype object >-PASS NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property >-PASS NamedNodeMap interface: existence and properties of interface prototype object's @@unscopables property >-PASS NamedNodeMap interface: attribute length >-PASS Unscopable handled correctly for length property on NamedNodeMap >-PASS NamedNodeMap interface: operation item(unsigned long) >-PASS Unscopable handled correctly for item(unsigned long) on NamedNodeMap >-PASS NamedNodeMap interface: operation getNamedItem(DOMString) >-PASS Unscopable handled correctly for getNamedItem(DOMString) on NamedNodeMap >-PASS NamedNodeMap interface: operation getNamedItemNS(DOMString, DOMString) >-PASS Unscopable handled correctly for getNamedItemNS(DOMString, DOMString) on NamedNodeMap >-PASS NamedNodeMap interface: operation setNamedItem(Attr) >-PASS Unscopable handled correctly for setNamedItem(Attr) on NamedNodeMap >-PASS NamedNodeMap interface: operation setNamedItemNS(Attr) >-PASS Unscopable handled correctly for setNamedItemNS(Attr) on NamedNodeMap >-PASS NamedNodeMap interface: operation removeNamedItem(DOMString) >-PASS Unscopable handled correctly for removeNamedItem(DOMString) on NamedNodeMap >-PASS NamedNodeMap interface: operation removeNamedItemNS(DOMString, DOMString) >-PASS Unscopable handled correctly for removeNamedItemNS(DOMString, DOMString) on NamedNodeMap >-PASS Attr interface: existence and properties of interface object >-PASS Attr interface object length >-PASS Attr interface object name >-PASS Attr interface: existence and properties of interface prototype object >-PASS Attr interface: existence and properties of interface prototype object's "constructor" property >-PASS Attr interface: existence and properties of interface prototype object's @@unscopables property >-PASS Attr interface: attribute namespaceURI >-PASS Unscopable handled correctly for namespaceURI property on Attr >-PASS Attr interface: attribute prefix >-PASS Unscopable handled correctly for prefix property on Attr >-PASS Attr interface: attribute localName >-PASS Unscopable handled correctly for localName property on Attr >-PASS Attr interface: attribute name >-PASS Unscopable handled correctly for name property on Attr >-PASS Attr interface: attribute value >-PASS Unscopable handled correctly for value property on Attr >-PASS Attr interface: attribute ownerElement >-PASS Unscopable handled correctly for ownerElement property on Attr >-PASS Attr interface: attribute specified >-PASS Unscopable handled correctly for specified property on Attr >-PASS Attr must be primary interface of document.querySelector("[id]").attributes[0] >-PASS Stringification of document.querySelector("[id]").attributes[0] >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "namespaceURI" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "prefix" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "localName" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "name" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "value" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "ownerElement" with the proper type >-PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "specified" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeType" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeName" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "baseURI" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isConnected" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "ownerDocument" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentNode" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "parentElement" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "childNodes" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "firstChild" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lastChild" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "previousSibling" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nextSibling" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "nodeValue" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "textContent" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "normalize()" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS Node interface: document.querySelector("[id]").attributes[0] must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS EventTarget interface: document.querySelector("[id]").attributes[0] must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on document.querySelector("[id]").attributes[0] with too few arguments must throw TypeError >-PASS CharacterData interface: existence and properties of interface object >-PASS CharacterData interface object length >-PASS CharacterData interface object name >-PASS CharacterData interface: existence and properties of interface prototype object >-PASS CharacterData interface: existence and properties of interface prototype object's "constructor" property >-PASS CharacterData interface: existence and properties of interface prototype object's @@unscopables property >-PASS CharacterData interface: attribute data >-PASS Unscopable handled correctly for data property on CharacterData >-PASS CharacterData interface: attribute length >-PASS Unscopable handled correctly for length property on CharacterData >-PASS CharacterData interface: operation substringData(unsigned long, unsigned long) >-PASS Unscopable handled correctly for substringData(unsigned long, unsigned long) on CharacterData >-PASS CharacterData interface: operation appendData(DOMString) >-PASS Unscopable handled correctly for appendData(DOMString) on CharacterData >-PASS CharacterData interface: operation insertData(unsigned long, DOMString) >-PASS Unscopable handled correctly for insertData(unsigned long, DOMString) on CharacterData >-PASS CharacterData interface: operation deleteData(unsigned long, unsigned long) >-PASS Unscopable handled correctly for deleteData(unsigned long, unsigned long) on CharacterData >-PASS CharacterData interface: operation replaceData(unsigned long, unsigned long, DOMString) >-PASS Unscopable handled correctly for replaceData(unsigned long, unsigned long, DOMString) on CharacterData >-PASS CharacterData interface: attribute previousElementSibling >-PASS Unscopable handled correctly for previousElementSibling property on CharacterData >-PASS CharacterData interface: attribute nextElementSibling >-PASS Unscopable handled correctly for nextElementSibling property on CharacterData >-PASS CharacterData interface: operation before([object Object],[object Object]) >-PASS Unscopable handled correctly for before([object Object],[object Object]) on CharacterData >-PASS CharacterData interface: operation after([object Object],[object Object]) >-PASS Unscopable handled correctly for after([object Object],[object Object]) on CharacterData >-PASS CharacterData interface: operation replaceWith([object Object],[object Object]) >-PASS Unscopable handled correctly for replaceWith([object Object],[object Object]) on CharacterData >-PASS CharacterData interface: operation remove() >-PASS Unscopable handled correctly for remove() on CharacterData >-PASS Text interface: existence and properties of interface object >-PASS Text interface object length >-PASS Text interface object name >-PASS Text interface: existence and properties of interface prototype object >-PASS Text interface: existence and properties of interface prototype object's "constructor" property >-PASS Text interface: existence and properties of interface prototype object's @@unscopables property >-PASS Text interface: operation splitText(unsigned long) >-PASS Unscopable handled correctly for splitText(unsigned long) on Text >-PASS Text interface: attribute wholeText >-PASS Unscopable handled correctly for wholeText property on Text >-PASS Text interface: attribute assignedSlot >-PASS Unscopable handled correctly for assignedSlot property on Text >-PASS Text must be primary interface of document.createTextNode("abc") >-PASS Stringification of document.createTextNode("abc") >-PASS Text interface: document.createTextNode("abc") must inherit property "splitText(unsigned long)" with the proper type >-PASS Text interface: calling splitText(unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Text interface: document.createTextNode("abc") must inherit property "wholeText" with the proper type >-PASS Text interface: document.createTextNode("abc") must inherit property "assignedSlot" with the proper type >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "data" with the proper type >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "length" with the proper type >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "substringData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "appendData(DOMString)" with the proper type >-PASS CharacterData interface: calling appendData(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "insertData(unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling insertData(unsigned long, DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "previousElementSibling" with the proper type >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "nextElementSibling" with the proper type >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "before([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling before([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "after([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling after([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceWith([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createTextNode("abc") must inherit property "remove()" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "nodeType" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "nodeName" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "baseURI" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "isConnected" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "ownerDocument" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "parentNode" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "parentElement" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "childNodes" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "firstChild" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "lastChild" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "previousSibling" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "nextSibling" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "nodeValue" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "textContent" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "normalize()" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: document.createTextNode("abc") must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createTextNode("abc") must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createTextNode("abc") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createTextNode("abc") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createTextNode("abc") must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on document.createTextNode("abc") with too few arguments must throw TypeError >-PASS CDATASection interface: existence and properties of interface object >-PASS CDATASection interface object length >-PASS CDATASection interface object name >-PASS CDATASection interface: existence and properties of interface prototype object >-PASS CDATASection interface: existence and properties of interface prototype object's "constructor" property >-PASS CDATASection interface: existence and properties of interface prototype object's @@unscopables property >-PASS ProcessingInstruction interface: existence and properties of interface object >-PASS ProcessingInstruction interface object length >-PASS ProcessingInstruction interface object name >-PASS ProcessingInstruction interface: existence and properties of interface prototype object >-PASS ProcessingInstruction interface: existence and properties of interface prototype object's "constructor" property >-PASS ProcessingInstruction interface: existence and properties of interface prototype object's @@unscopables property >-PASS ProcessingInstruction interface: attribute target >-PASS Unscopable handled correctly for target property on ProcessingInstruction >-PASS ProcessingInstruction must be primary interface of xmlDoc.createProcessingInstruction("abc", "def") >-PASS Stringification of xmlDoc.createProcessingInstruction("abc", "def") >-PASS ProcessingInstruction interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "target" with the proper type >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "data" with the proper type >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "length" with the proper type >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "substringData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendData(DOMString)" with the proper type >-PASS CharacterData interface: calling appendData(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertData(unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling insertData(unsigned long, DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousElementSibling" with the proper type >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextElementSibling" with the proper type >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "before([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling before([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "after([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling after([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceWith([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "remove()" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeType" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeName" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "baseURI" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isConnected" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ownerDocument" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentNode" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentElement" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "childNodes" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "firstChild" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lastChild" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousSibling" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextSibling" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeValue" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "textContent" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "normalize()" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError >-PASS Comment interface: existence and properties of interface object >-PASS Comment interface object length >-PASS Comment interface object name >-PASS Comment interface: existence and properties of interface prototype object >-PASS Comment interface: existence and properties of interface prototype object's "constructor" property >-PASS Comment interface: existence and properties of interface prototype object's @@unscopables property >-PASS Comment must be primary interface of document.createComment("abc") >-PASS Stringification of document.createComment("abc") >-PASS CharacterData interface: document.createComment("abc") must inherit property "data" with the proper type >-PASS CharacterData interface: document.createComment("abc") must inherit property "length" with the proper type >-PASS CharacterData interface: document.createComment("abc") must inherit property "substringData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling substringData(unsigned long, unsigned long) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "appendData(DOMString)" with the proper type >-PASS CharacterData interface: calling appendData(DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "insertData(unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling insertData(unsigned long, DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "deleteData(unsigned long, unsigned long)" with the proper type >-PASS CharacterData interface: calling deleteData(unsigned long, unsigned long) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "replaceData(unsigned long, unsigned long, DOMString)" with the proper type >-PASS CharacterData interface: calling replaceData(unsigned long, unsigned long, DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "previousElementSibling" with the proper type >-PASS CharacterData interface: document.createComment("abc") must inherit property "nextElementSibling" with the proper type >-PASS CharacterData interface: document.createComment("abc") must inherit property "before([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling before([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "after([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling after([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "replaceWith([object Object],[object Object])" with the proper type >-PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError >-PASS CharacterData interface: document.createComment("abc") must inherit property "remove()" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "ELEMENT_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "ATTRIBUTE_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "TEXT_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "CDATA_SECTION_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "ENTITY_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "COMMENT_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "NOTATION_NODE" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "nodeType" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "nodeName" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "baseURI" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "isConnected" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "ownerDocument" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "getRootNode(GetRootNodeOptions)" with the proper type >-PASS Node interface: calling getRootNode(GetRootNodeOptions) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "parentNode" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "parentElement" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "hasChildNodes()" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "childNodes" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "firstChild" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "lastChild" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "previousSibling" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "nextSibling" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "nodeValue" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "textContent" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "normalize()" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "cloneNode(boolean)" with the proper type >-PASS Node interface: calling cloneNode(boolean) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "isEqualNode(Node)" with the proper type >-PASS Node interface: calling isEqualNode(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "isSameNode(Node)" with the proper type >-PASS Node interface: calling isSameNode(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type >-PASS Node interface: document.createComment("abc") must inherit property "compareDocumentPosition(Node)" with the proper type >-PASS Node interface: calling compareDocumentPosition(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "contains(Node)" with the proper type >-PASS Node interface: calling contains(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "lookupPrefix(DOMString)" with the proper type >-PASS Node interface: calling lookupPrefix(DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "lookupNamespaceURI(DOMString)" with the proper type >-PASS Node interface: calling lookupNamespaceURI(DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "isDefaultNamespace(DOMString)" with the proper type >-PASS Node interface: calling isDefaultNamespace(DOMString) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "insertBefore(Node, Node)" with the proper type >-PASS Node interface: calling insertBefore(Node, Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "appendChild(Node)" with the proper type >-PASS Node interface: calling appendChild(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "replaceChild(Node, Node)" with the proper type >-PASS Node interface: calling replaceChild(Node, Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS Node interface: document.createComment("abc") must inherit property "removeChild(Node)" with the proper type >-PASS Node interface: calling removeChild(Node) on document.createComment("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createComment("abc") must inherit property "addEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createComment("abc") must inherit property "removeEventListener(DOMString, EventListener, [object Object],[object Object])" with the proper type >-PASS EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError >-PASS EventTarget interface: document.createComment("abc") must inherit property "dispatchEvent(Event)" with the proper type >-PASS EventTarget interface: calling dispatchEvent(Event) on document.createComment("abc") with too few arguments must throw TypeError >-FAIL AbstractRange interface: existence and properties of interface object assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface object length assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface object name assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface: existence and properties of interface prototype object assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-FAIL AbstractRange interface: attribute startContainer assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-PASS Unscopable handled correctly for startContainer property on AbstractRange >-FAIL AbstractRange interface: attribute startOffset assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-PASS Unscopable handled correctly for startOffset property on AbstractRange >-FAIL AbstractRange interface: attribute endContainer assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-PASS Unscopable handled correctly for endContainer property on AbstractRange >-FAIL AbstractRange interface: attribute endOffset assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-PASS Unscopable handled correctly for endOffset property on AbstractRange >-FAIL AbstractRange interface: attribute collapsed assert_own_property: self does not have own property "AbstractRange" expected property "AbstractRange" missing >-PASS Unscopable handled correctly for collapsed property on AbstractRange >-FAIL StaticRange interface: existence and properties of interface object assert_own_property: should inherit from AbstractRange, but self has no such property expected property "AbstractRange" missing >-PASS StaticRange interface object length >-PASS StaticRange interface object name >-FAIL StaticRange interface: existence and properties of interface prototype object assert_own_property: should inherit from AbstractRange, but self has no such property expected property "AbstractRange" missing >-PASS StaticRange interface: existence and properties of interface prototype object's "constructor" property >-PASS StaticRange interface: existence and properties of interface prototype object's @@unscopables property >-FAIL Range interface: existence and properties of interface object assert_own_property: should inherit from AbstractRange, but self has no such property expected property "AbstractRange" missing >-PASS Range interface object length >-PASS Range interface object name >-FAIL Range interface: existence and properties of interface prototype object assert_own_property: should inherit from AbstractRange, but self has no such property expected property "AbstractRange" missing >-PASS Range interface: existence and properties of interface prototype object's "constructor" property >-PASS Range interface: existence and properties of interface prototype object's @@unscopables property >-PASS Range interface: attribute commonAncestorContainer >-PASS Unscopable handled correctly for commonAncestorContainer property on Range >-PASS Range interface: operation setStart(Node, unsigned long) >-PASS Unscopable handled correctly for setStart(Node, unsigned long) on Range >-PASS Range interface: operation setEnd(Node, unsigned long) >-PASS Unscopable handled correctly for setEnd(Node, unsigned long) on Range >-PASS Range interface: operation setStartBefore(Node) >-PASS Unscopable handled correctly for setStartBefore(Node) on Range >-PASS Range interface: operation setStartAfter(Node) >-PASS Unscopable handled correctly for setStartAfter(Node) on Range >-PASS Range interface: operation setEndBefore(Node) >-PASS Unscopable handled correctly for setEndBefore(Node) on Range >-PASS Range interface: operation setEndAfter(Node) >-PASS Unscopable handled correctly for setEndAfter(Node) on Range >-PASS Range interface: operation collapse(boolean) >-PASS Unscopable handled correctly for collapse(boolean) on Range >-PASS Range interface: operation selectNode(Node) >-PASS Unscopable handled correctly for selectNode(Node) on Range >-PASS Range interface: operation selectNodeContents(Node) >-PASS Unscopable handled correctly for selectNodeContents(Node) on Range >-PASS Range interface: constant START_TO_START on interface object >-PASS Range interface: constant START_TO_START on interface prototype object >-PASS Range interface: constant START_TO_END on interface object >-PASS Range interface: constant START_TO_END on interface prototype object >-PASS Range interface: constant END_TO_END on interface object >-PASS Range interface: constant END_TO_END on interface prototype object >-PASS Range interface: constant END_TO_START on interface object >-PASS Range interface: constant END_TO_START on interface prototype object >-PASS Range interface: operation compareBoundaryPoints(unsigned short, Range) >-PASS Unscopable handled correctly for compareBoundaryPoints(unsigned short, Range) on Range >-PASS Range interface: operation deleteContents() >-PASS Unscopable handled correctly for deleteContents() on Range >-PASS Range interface: operation extractContents() >-PASS Unscopable handled correctly for extractContents() on Range >-PASS Range interface: operation cloneContents() >-PASS Unscopable handled correctly for cloneContents() on Range >-PASS Range interface: operation insertNode(Node) >-PASS Unscopable handled correctly for insertNode(Node) on Range >-PASS Range interface: operation surroundContents(Node) >-PASS Unscopable handled correctly for surroundContents(Node) on Range >-PASS Range interface: operation cloneRange() >-PASS Unscopable handled correctly for cloneRange() on Range >-PASS Range interface: operation detach() >-PASS Unscopable handled correctly for detach() on Range >-PASS Range interface: operation isPointInRange(Node, unsigned long) >-PASS Unscopable handled correctly for isPointInRange(Node, unsigned long) on Range >-PASS Range interface: operation comparePoint(Node, unsigned long) >-PASS Unscopable handled correctly for comparePoint(Node, unsigned long) on Range >-PASS Range interface: operation intersectsNode(Node) >-PASS Unscopable handled correctly for intersectsNode(Node) on Range >-PASS Range interface: stringifier >-PASS Range must be primary interface of document.createRange() >-PASS Stringification of document.createRange() >-PASS Range interface: document.createRange() must inherit property "commonAncestorContainer" with the proper type >-PASS Range interface: document.createRange() must inherit property "setStart(Node, unsigned long)" with the proper type >-PASS Range interface: calling setStart(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "setEnd(Node, unsigned long)" with the proper type >-PASS Range interface: calling setEnd(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "setStartBefore(Node)" with the proper type >-PASS Range interface: calling setStartBefore(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "setStartAfter(Node)" with the proper type >-PASS Range interface: calling setStartAfter(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "setEndBefore(Node)" with the proper type >-PASS Range interface: calling setEndBefore(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "setEndAfter(Node)" with the proper type >-PASS Range interface: calling setEndAfter(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "collapse(boolean)" with the proper type >-PASS Range interface: calling collapse(boolean) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "selectNode(Node)" with the proper type >-PASS Range interface: calling selectNode(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "selectNodeContents(Node)" with the proper type >-PASS Range interface: calling selectNodeContents(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "START_TO_START" with the proper type >-PASS Range interface: document.createRange() must inherit property "START_TO_END" with the proper type >-PASS Range interface: document.createRange() must inherit property "END_TO_END" with the proper type >-PASS Range interface: document.createRange() must inherit property "END_TO_START" with the proper type >-PASS Range interface: document.createRange() must inherit property "compareBoundaryPoints(unsigned short, Range)" with the proper type >-PASS Range interface: calling compareBoundaryPoints(unsigned short, Range) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "deleteContents()" with the proper type >-PASS Range interface: document.createRange() must inherit property "extractContents()" with the proper type >-PASS Range interface: document.createRange() must inherit property "cloneContents()" with the proper type >-PASS Range interface: document.createRange() must inherit property "insertNode(Node)" with the proper type >-PASS Range interface: calling insertNode(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "surroundContents(Node)" with the proper type >-PASS Range interface: calling surroundContents(Node) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "cloneRange()" with the proper type >-PASS Range interface: document.createRange() must inherit property "detach()" with the proper type >-PASS Range interface: document.createRange() must inherit property "isPointInRange(Node, unsigned long)" with the proper type >-PASS Range interface: calling isPointInRange(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "comparePoint(Node, unsigned long)" with the proper type >-PASS Range interface: calling comparePoint(Node, unsigned long) on document.createRange() with too few arguments must throw TypeError >-PASS Range interface: document.createRange() must inherit property "intersectsNode(Node)" with the proper type >-PASS Range interface: calling intersectsNode(Node) on document.createRange() with too few arguments must throw TypeError >-PASS AbstractRange interface: document.createRange() must inherit property "startContainer" with the proper type >-PASS AbstractRange interface: document.createRange() must inherit property "startOffset" with the proper type >-PASS AbstractRange interface: document.createRange() must inherit property "endContainer" with the proper type >-PASS AbstractRange interface: document.createRange() must inherit property "endOffset" with the proper type >-PASS AbstractRange interface: document.createRange() must inherit property "collapsed" with the proper type >-PASS Range must be primary interface of detachedRange >-PASS Stringification of detachedRange >-PASS Range interface: detachedRange must inherit property "commonAncestorContainer" with the proper type >-PASS Range interface: detachedRange must inherit property "setStart(Node, unsigned long)" with the proper type >-PASS Range interface: calling setStart(Node, unsigned long) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "setEnd(Node, unsigned long)" with the proper type >-PASS Range interface: calling setEnd(Node, unsigned long) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "setStartBefore(Node)" with the proper type >-PASS Range interface: calling setStartBefore(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "setStartAfter(Node)" with the proper type >-PASS Range interface: calling setStartAfter(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "setEndBefore(Node)" with the proper type >-PASS Range interface: calling setEndBefore(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "setEndAfter(Node)" with the proper type >-PASS Range interface: calling setEndAfter(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "collapse(boolean)" with the proper type >-PASS Range interface: calling collapse(boolean) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "selectNode(Node)" with the proper type >-PASS Range interface: calling selectNode(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "selectNodeContents(Node)" with the proper type >-PASS Range interface: calling selectNodeContents(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "START_TO_START" with the proper type >-PASS Range interface: detachedRange must inherit property "START_TO_END" with the proper type >-PASS Range interface: detachedRange must inherit property "END_TO_END" with the proper type >-PASS Range interface: detachedRange must inherit property "END_TO_START" with the proper type >-PASS Range interface: detachedRange must inherit property "compareBoundaryPoints(unsigned short, Range)" with the proper type >-PASS Range interface: calling compareBoundaryPoints(unsigned short, Range) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "deleteContents()" with the proper type >-PASS Range interface: detachedRange must inherit property "extractContents()" with the proper type >-PASS Range interface: detachedRange must inherit property "cloneContents()" with the proper type >-PASS Range interface: detachedRange must inherit property "insertNode(Node)" with the proper type >-PASS Range interface: calling insertNode(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "surroundContents(Node)" with the proper type >-PASS Range interface: calling surroundContents(Node) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "cloneRange()" with the proper type >-PASS Range interface: detachedRange must inherit property "detach()" with the proper type >-PASS Range interface: detachedRange must inherit property "isPointInRange(Node, unsigned long)" with the proper type >-PASS Range interface: calling isPointInRange(Node, unsigned long) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "comparePoint(Node, unsigned long)" with the proper type >-PASS Range interface: calling comparePoint(Node, unsigned long) on detachedRange with too few arguments must throw TypeError >-PASS Range interface: detachedRange must inherit property "intersectsNode(Node)" with the proper type >-PASS Range interface: calling intersectsNode(Node) on detachedRange with too few arguments must throw TypeError >-PASS AbstractRange interface: detachedRange must inherit property "startContainer" with the proper type >-PASS AbstractRange interface: detachedRange must inherit property "startOffset" with the proper type >-PASS AbstractRange interface: detachedRange must inherit property "endContainer" with the proper type >-PASS AbstractRange interface: detachedRange must inherit property "endOffset" with the proper type >-PASS AbstractRange interface: detachedRange must inherit property "collapsed" with the proper type >-PASS NodeIterator interface: existence and properties of interface object >-PASS NodeIterator interface object length >-PASS NodeIterator interface object name >-PASS NodeIterator interface: existence and properties of interface prototype object >-PASS NodeIterator interface: existence and properties of interface prototype object's "constructor" property >-PASS NodeIterator interface: existence and properties of interface prototype object's @@unscopables property >-PASS NodeIterator interface: attribute root >-PASS Unscopable handled correctly for root property on NodeIterator >-PASS NodeIterator interface: attribute referenceNode >-PASS Unscopable handled correctly for referenceNode property on NodeIterator >-PASS NodeIterator interface: attribute pointerBeforeReferenceNode >-PASS Unscopable handled correctly for pointerBeforeReferenceNode property on NodeIterator >-PASS NodeIterator interface: attribute whatToShow >-PASS Unscopable handled correctly for whatToShow property on NodeIterator >-PASS NodeIterator interface: attribute filter >-PASS Unscopable handled correctly for filter property on NodeIterator >-PASS NodeIterator interface: operation nextNode() >-PASS Unscopable handled correctly for nextNode() on NodeIterator >-PASS NodeIterator interface: operation previousNode() >-PASS Unscopable handled correctly for previousNode() on NodeIterator >-PASS NodeIterator interface: operation detach() >-PASS Unscopable handled correctly for detach() on NodeIterator >-PASS NodeIterator must be primary interface of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) >-PASS Stringification of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "referenceNode" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "pointerBeforeReferenceNode" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode()" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode()" with the proper type >-PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "detach()" with the proper type >-PASS TreeWalker interface: existence and properties of interface object >-PASS TreeWalker interface object length >-PASS TreeWalker interface object name >-PASS TreeWalker interface: existence and properties of interface prototype object >-PASS TreeWalker interface: existence and properties of interface prototype object's "constructor" property >-PASS TreeWalker interface: existence and properties of interface prototype object's @@unscopables property >-PASS TreeWalker interface: attribute root >-PASS Unscopable handled correctly for root property on TreeWalker >-PASS TreeWalker interface: attribute whatToShow >-PASS Unscopable handled correctly for whatToShow property on TreeWalker >-PASS TreeWalker interface: attribute filter >-PASS Unscopable handled correctly for filter property on TreeWalker >-PASS TreeWalker interface: attribute currentNode >-PASS Unscopable handled correctly for currentNode property on TreeWalker >-PASS TreeWalker interface: operation parentNode() >-PASS Unscopable handled correctly for parentNode() on TreeWalker >-PASS TreeWalker interface: operation firstChild() >-PASS Unscopable handled correctly for firstChild() on TreeWalker >-PASS TreeWalker interface: operation lastChild() >-PASS Unscopable handled correctly for lastChild() on TreeWalker >-PASS TreeWalker interface: operation previousSibling() >-PASS Unscopable handled correctly for previousSibling() on TreeWalker >-PASS TreeWalker interface: operation nextSibling() >-PASS Unscopable handled correctly for nextSibling() on TreeWalker >-PASS TreeWalker interface: operation previousNode() >-PASS Unscopable handled correctly for previousNode() on TreeWalker >-PASS TreeWalker interface: operation nextNode() >-PASS Unscopable handled correctly for nextNode() on TreeWalker >-PASS TreeWalker must be primary interface of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) >-PASS Stringification of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "currentNode" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "parentNode()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "firstChild()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "lastChild()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousSibling()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextSibling()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode()" with the proper type >-PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode()" with the proper type >-PASS NodeFilter interface: existence and properties of interface object >-PASS NodeFilter interface object name >-PASS NodeFilter interface: existence and properties of interface prototype object >-PASS NodeFilter interface: existence and properties of interface prototype object's "constructor" property >-PASS NodeFilter interface: existence and properties of interface prototype object's @@unscopables property >-PASS NodeFilter interface: constant FILTER_ACCEPT on interface object >-PASS NodeFilter interface: constant FILTER_ACCEPT on interface prototype object >-PASS NodeFilter interface: constant FILTER_REJECT on interface object >-PASS NodeFilter interface: constant FILTER_REJECT on interface prototype object >-PASS NodeFilter interface: constant FILTER_SKIP on interface object >-PASS NodeFilter interface: constant FILTER_SKIP on interface prototype object >-PASS NodeFilter interface: constant SHOW_ALL on interface object >-PASS NodeFilter interface: constant SHOW_ALL on interface prototype object >-PASS NodeFilter interface: constant SHOW_ELEMENT on interface object >-PASS NodeFilter interface: constant SHOW_ELEMENT on interface prototype object >-PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface object >-PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface prototype object >-PASS NodeFilter interface: constant SHOW_TEXT on interface object >-PASS NodeFilter interface: constant SHOW_TEXT on interface prototype object >-PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface object >-PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface prototype object >-PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface object >-PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface prototype object >-PASS NodeFilter interface: constant SHOW_ENTITY on interface object >-PASS NodeFilter interface: constant SHOW_ENTITY on interface prototype object >-PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface object >-PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface prototype object >-PASS NodeFilter interface: constant SHOW_COMMENT on interface object >-PASS NodeFilter interface: constant SHOW_COMMENT on interface prototype object >-PASS NodeFilter interface: constant SHOW_DOCUMENT on interface object >-PASS NodeFilter interface: constant SHOW_DOCUMENT on interface prototype object >-PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface object >-PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface prototype object >-PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface object >-PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface prototype object >-PASS NodeFilter interface: constant SHOW_NOTATION on interface object >-PASS NodeFilter interface: constant SHOW_NOTATION on interface prototype object >-PASS NodeFilter interface: operation acceptNode(Node) >-PASS Unscopable handled correctly for acceptNode(Node) on NodeFilter >-PASS DOMTokenList interface: existence and properties of interface object >-PASS DOMTokenList interface object length >-PASS DOMTokenList interface object name >-PASS DOMTokenList interface: existence and properties of interface prototype object >-PASS DOMTokenList interface: existence and properties of interface prototype object's "constructor" property >-PASS DOMTokenList interface: existence and properties of interface prototype object's @@unscopables property >-PASS DOMTokenList interface: attribute length >-PASS Unscopable handled correctly for length property on DOMTokenList >-PASS DOMTokenList interface: operation item(unsigned long) >-PASS Unscopable handled correctly for item(unsigned long) on DOMTokenList >-PASS DOMTokenList interface: operation contains(DOMString) >-PASS Unscopable handled correctly for contains(DOMString) on DOMTokenList >-PASS DOMTokenList interface: operation add(DOMString) >-PASS Unscopable handled correctly for add(DOMString) on DOMTokenList >-PASS DOMTokenList interface: operation remove(DOMString) >-PASS Unscopable handled correctly for remove(DOMString) on DOMTokenList >-PASS DOMTokenList interface: operation toggle(DOMString, boolean) >-PASS Unscopable handled correctly for toggle(DOMString, boolean) on DOMTokenList >-PASS DOMTokenList interface: operation replace(DOMString, DOMString) >-PASS Unscopable handled correctly for replace(DOMString, DOMString) on DOMTokenList >-PASS DOMTokenList interface: operation supports(DOMString) >-PASS Unscopable handled correctly for supports(DOMString) on DOMTokenList >-PASS DOMTokenList interface: attribute value >-PASS Unscopable handled correctly for value property on DOMTokenList >-PASS DOMTokenList interface: stringifier >-PASS DOMTokenList must be primary interface of document.body.classList >-PASS Stringification of document.body.classList >-PASS DOMTokenList interface: document.body.classList must inherit property "length" with the proper type >-PASS DOMTokenList interface: document.body.classList must inherit property "item(unsigned long)" with the proper type >-PASS DOMTokenList interface: calling item(unsigned long) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "contains(DOMString)" with the proper type >-PASS DOMTokenList interface: calling contains(DOMString) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "add(DOMString)" with the proper type >-PASS DOMTokenList interface: calling add(DOMString) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "remove(DOMString)" with the proper type >-PASS DOMTokenList interface: calling remove(DOMString) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "toggle(DOMString, boolean)" with the proper type >-PASS DOMTokenList interface: calling toggle(DOMString, boolean) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "replace(DOMString, DOMString)" with the proper type >-PASS DOMTokenList interface: calling replace(DOMString, DOMString) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "supports(DOMString)" with the proper type >-PASS DOMTokenList interface: calling supports(DOMString) on document.body.classList with too few arguments must throw TypeError >-PASS DOMTokenList interface: document.body.classList must inherit property "value" with the proper type >+FAIL Test driver promise_test: Unhandled rejection with value: object "TypeError: idlArray.add_dependency_idls is not a function. (In 'idlArray.add_dependency_idls(html)', 'idlArray.add_dependency_idls' is undefined)" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html b/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html >index 3cb08f405a5a768c26c0c1f25d3d6d32ea9beb77..c0fab016ae75b733a17da29e176f28e6cec243b7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html >@@ -19,11 +19,8 @@ element.setAttribute("bar", "baz"); > var idlArray = new IdlArray(); > > function doTest([html, dom]) { >- // HTML is needed for EventHandler. Provide a dummy interface for >- // LinkStyle which HTML depends on but we're not testing. >- idlArray.add_untested_idls('interface LinkStyle {};'); >- idlArray.add_untested_idls(html); > idlArray.add_idls(dom); >+ idlArray.add_dependency_idls(html); > idlArray.add_objects({ > EventTarget: ['new EventTarget()'], > Event: ['document.createEvent("Event")', 'new Event("foo")'], >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt >index 5fba8c877e5da7a2491f0f6c73e3dc21923f195a..65b93987a01707be3628a6e98391decb6d188a03 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes-expected.txt >@@ -34,6 +34,41 @@ PASS iframe.classList in null namespace should be DOMTokenList. > PASS output.classList in null namespace should be DOMTokenList. > PASS td.classList in null namespace should be DOMTokenList. > PASS th.classList in null namespace should be DOMTokenList. >+PASS a.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >+PASS area.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >+PASS link.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >+PASS iframe.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >+PASS output.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >+PASS td.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >+PASS th.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >+FAIL a.relList in http://www.w3.org/2000/svg namespace should be DOMTokenList. assert_equals: expected "[object DOMTokenList]" but got "[object Undefined]" >+PASS area.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS link.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS iframe.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS output.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS td.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS th.relList in http://www.w3.org/2000/svg namespace should be undefined. >+PASS a.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS area.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS link.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS iframe.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS output.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS td.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS th.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >+PASS a.relList in http://example.com/ namespace should be undefined. >+PASS area.relList in http://example.com/ namespace should be undefined. >+PASS link.relList in http://example.com/ namespace should be undefined. >+PASS iframe.relList in http://example.com/ namespace should be undefined. >+PASS output.relList in http://example.com/ namespace should be undefined. >+PASS td.relList in http://example.com/ namespace should be undefined. >+PASS th.relList in http://example.com/ namespace should be undefined. >+PASS a.relList in null namespace should be undefined. >+PASS area.relList in null namespace should be undefined. >+PASS link.relList in null namespace should be undefined. >+PASS iframe.relList in null namespace should be undefined. >+PASS output.relList in null namespace should be undefined. >+PASS td.relList in null namespace should be undefined. >+PASS th.relList in null namespace should be undefined. > PASS a.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. > PASS area.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. > PASS link.htmlFor in http://www.w3.org/1999/xhtml namespace should be undefined. >@@ -69,41 +104,6 @@ PASS iframe.htmlFor in null namespace should be undefined. > PASS output.htmlFor in null namespace should be undefined. > PASS td.htmlFor in null namespace should be undefined. > PASS th.htmlFor in null namespace should be undefined. >-PASS a.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >-PASS area.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >-PASS link.relList in http://www.w3.org/1999/xhtml namespace should be DOMTokenList. >-PASS iframe.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >-PASS output.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >-PASS td.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >-PASS th.relList in http://www.w3.org/1999/xhtml namespace should be undefined. >-PASS a.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS area.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS link.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS iframe.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS output.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS td.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS th.relList in http://www.w3.org/2000/svg namespace should be undefined. >-PASS a.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS area.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS link.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS iframe.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS output.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS td.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS th.relList in http://www.w3.org/1998/Math/MathML namespace should be undefined. >-PASS a.relList in http://example.com/ namespace should be undefined. >-PASS area.relList in http://example.com/ namespace should be undefined. >-PASS link.relList in http://example.com/ namespace should be undefined. >-PASS iframe.relList in http://example.com/ namespace should be undefined. >-PASS output.relList in http://example.com/ namespace should be undefined. >-PASS td.relList in http://example.com/ namespace should be undefined. >-PASS th.relList in http://example.com/ namespace should be undefined. >-PASS a.relList in null namespace should be undefined. >-PASS area.relList in null namespace should be undefined. >-PASS link.relList in null namespace should be undefined. >-PASS iframe.relList in null namespace should be undefined. >-PASS output.relList in null namespace should be undefined. >-PASS td.relList in null namespace should be undefined. >-PASS th.relList in null namespace should be undefined. > PASS a.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. > PASS area.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. > PASS link.sandbox in http://www.w3.org/1999/xhtml namespace should be undefined. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html b/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html >index 034e31c0ff1991abf4cdbe14b43d4ada82bdcabe..e5f060b8ac9d3de2411664749aec7784ca3aaf5e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/lists/DOMTokenList-coverage-for-attributes.html >@@ -10,9 +10,10 @@ > var pairs = [ > // Defined in DOM > {attr: "classList", sup: ["anyElement"]}, >+ // Defined in HTML except for a which is also SVG >+ {attr: "relList", sup: ["a", "area", "link"]}, > // Defined in HTML > {attr: "htmlFor", sup: ["output"]}, >- {attr: "relList", sup: ["a", "area", "link"]}, > {attr: "sandbox", sup: ["iframe"]}, > {attr: "sizes", sup: ["link"]} > ]; >@@ -26,7 +27,11 @@ var namespaces = [ > > var elements = ["a", "area", "link", "iframe", "output", "td", "th"]; > function testAttr(pair, new_el){ >- return (pair.attr === "classList" || (new_el.namespaceURI === "http://www.w3.org/1999/xhtml" && pair.sup.indexOf(new_el.localName) != -1)); >+ return (pair.attr === "classList" || >+ (pair.attr === "relList" && new_el.localName === "a" && >+ new_el.namespaceURI === "http://www.w3.org/2000/svg") || >+ (new_el.namespaceURI === "http://www.w3.org/1999/xhtml" && >+ pair.sup.indexOf(new_el.localName) != -1)); > } > > pairs.forEach(function(pair) { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js >index edbac646d5ae84bfc86a952a9b3759a01e7b5470..c18b2069f98ff98671aa553560bb2dd0deaef50d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagName.js >@@ -190,4 +190,19 @@ function test_getElementsByTagName(context, element) { > get_elements(context); > assert_array_equals(actual, expected); > }, "getElementsByTagName('*')") >+ >+ test(function() { >+ var t1 = element.appendChild(document.createElement("abc")); >+ this.add_cleanup(function() {element.removeChild(t1)}); >+ >+ var l = context.getElementsByTagName("abc"); >+ assert_true(l instanceof HTMLCollection); >+ assert_equals(l.length, 1); >+ >+ var t2 = element.appendChild(document.createElement("abc")); >+ assert_equals(l.length, 2); >+ >+ element.removeChild(t2); >+ assert_equals(l.length, 1); >+ }, "getElementsByTagName() should be a live collection"); > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js >index a1bb3158745d6950d3dd332a1ad382a471cccf1f..b610c49d864c2affad0acabc620d90667f90cb5a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-Element-getElementsByTagNameNS.js >@@ -125,4 +125,19 @@ function test_getElementsByTagNameNS(context, element) { > assert_array_equals(context.getElementsByTagNameNS(null, "0"), []); > assert_array_equals(context.getElementsByTagNameNS(null, "div"), []); > }, "Empty lists") >+ >+ test(function() { >+ var t1 = element.appendChild(document.createElementNS("test", "abc")); >+ this.add_cleanup(function() {element.removeChild(t1)}); >+ >+ var l = context.getElementsByTagNameNS("test", "abc"); >+ assert_true(l instanceof HTMLCollection); >+ assert_equals(l.length, 1); >+ >+ var t2 = element.appendChild(document.createElementNS("test", "abc")); >+ assert_equals(l.length, 2); >+ >+ element.removeChild(t2); >+ assert_equals(l.length, 1); >+ }, "getElementsByTagNameNS() should be a live collection"); > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-expected.txt >index 2eb8f81687f56924dc37736b37a04c9b87e7788c..8beeee176dba24a00e96ca11b07809d533c0f5e6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor-expected.txt >@@ -3,5 +3,5 @@ PASS new Document(): interfaces > PASS new Document(): children > PASS new Document(): metadata > PASS new Document(): characterSet aliases >-FAIL new Document(): URL parsing assert_equals: expected "http://example.org/?%C3%A4" but got "http://example.org/?ä" >+PASS new Document(): URL parsing > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor.html >index 2f26982c9658478701ef950389c03c01be20ab7d..ceb41926f85869c996e2cb248e4a1853198b8d3c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-constructor.html >@@ -36,6 +36,7 @@ test(function() { > assert_equals(doc.contentType, "application/xml"); > assert_equals(doc.origin, document.origin); > assert_equals(doc.createElement("DIV").localName, "DIV"); >+ assert_equals(doc.createElement("a").constructor, Element); > }, "new Document(): metadata") > > test(function() { >@@ -47,7 +48,8 @@ test(function() { > > test(function() { > var doc = new Document(); >- var a = doc.createElement("a"); >+ var a = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"); >+ assert_equals(a.constructor, HTMLAnchorElement); > // In UTF-8: 0xC3 0xA4 > a.href = "http://example.org/?\u00E4"; > assert_equals(a.href, "http://example.org/?%C3%A4"); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.html >deleted file mode 100644 >index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.svg b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.svg >deleted file mode 100644 >index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xhtml b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xhtml >deleted file mode 100644 >index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xml b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xml >deleted file mode 100644 >index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log >index 0967bd707e5efafad28128caf2b754b2ef19aece..099333f45c373b8d02ee3330d7c77b816bed0984 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/w3c-import.log >@@ -26,10 +26,6 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.svg > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xhtml > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/bare_xhtml.xml >-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.html >-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.svg >-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xhtml >-/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/empty.xml > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/generate.py > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/mathml.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createElement-namespace-tests/mathml.svg >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3beb24689e5a00627d94953c271b034ca5a5ff5c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS getElementsByClassName() should be a live collection >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html >new file mode 100644 >index 0000000000000000000000000000000000000000..db8fac212d7fbcedb746ff0ae4880dec63c91d3b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<title>Document.getElementsByClassName</title> >+<link rel="author" title="Intel" href="http://www.intel.com"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<script> >+test(function() { >+ var a = document.createElement("a"), >+ b = document.createElement("b"); >+ a.className = "foo"; >+ this.add_cleanup(function() {document.body.removeChild(a);}); >+ document.body.appendChild(a); >+ >+ var l = document.getElementsByClassName("foo"); >+ assert_true(l instanceof HTMLCollection); >+ assert_equals(l.length, 1); >+ >+ b.className = "foo"; >+ document.body.appendChild(b); >+ assert_equals(l.length, 2); >+ >+ document.body.removeChild(b); >+ assert_equals(l.length, 1); >+}, "getElementsByClassName() should be a live collection"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt >index 790b75c1484cb93864626fcbb7ad20a8dfc1e934..5ee4d6bcb1afe20cd53d84ab2c23e679f4d9d904 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt >@@ -19,4 +19,5 @@ PASS Element in non-HTML namespace, non-ascii characters in name > PASS Element in HTML namespace, prefix, non-ascii characters in name > PASS Element in non-HTML namespace, prefix, non-ascii characters in name > PASS getElementsByTagName('*') >+PASS getElementsByTagName() should be a live collection > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt >index 3d90920d9357ea787ebf53130cf38a41e658f8e4..030214e563d995b726bb427f5855340be4d95060 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS-expected.txt >@@ -12,4 +12,5 @@ PASS BODY element in test namespace, prefix > PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*') > PASS getElementsByTagNameNS('*', '*') > PASS Empty lists >+PASS getElementsByTagNameNS() should be a live collection > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt >index 0ee0cc055e051c5e6d44343331ea7667620e2716..e07b1b63e55fa4926164ce21835d3fad44cfe1cf 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName-expected.txt >@@ -1,4 +1,5 @@ > > PASS getElementsByClassName should work on disconnected subtrees. > PASS Interface should be correct. >+PASS getElementsByClassName() should be a live collection > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html >index 332c3060f1a94bd2e339ee18aef80d07a6043325..bc87b05d251a9aa0dbb2512060e55365e556d68c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByClassName.html >@@ -13,9 +13,31 @@ test(function() { > var secondList = a.getElementsByClassName("foo") > assert_true(list === secondList || list !== secondList, "Caching is allowed.") > }, "getElementsByClassName should work on disconnected subtrees.") >+ > test(function() { > var list = document.getElementsByClassName("foo") > assert_false(list instanceof NodeList, "NodeList") > assert_true(list instanceof HTMLCollection, "HTMLCollection") > }, "Interface should be correct.") >+ >+test(function() { >+ var a = document.createElement("a"); >+ var b = document.createElement("b"); >+ var c = document.createElement("c"); >+ b.className = "foo"; >+ document.body.appendChild(a); >+ this.add_cleanup(function() {document.body.removeChild(a)}); >+ a.appendChild(b); >+ >+ var l = a.getElementsByClassName("foo"); >+ assert_true(l instanceof HTMLCollection); >+ assert_equals(l.length, 1); >+ >+ c.className = "foo"; >+ a.appendChild(c); >+ assert_equals(l.length, 2); >+ >+ a.removeChild(c); >+ assert_equals(l.length, 1); >+}, "getElementsByClassName() should be a live collection"); > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt >index cc7ae5dd1540df952b6e2ea8bc318b965ad1b562..9e093abf64351cad7978da05b16a99375ae68bcd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt >@@ -19,5 +19,6 @@ PASS Element in non-HTML namespace, non-ascii characters in name > PASS Element in HTML namespace, prefix, non-ascii characters in name > PASS Element in non-HTML namespace, prefix, non-ascii characters in name > PASS getElementsByTagName('*') >+PASS getElementsByTagName() should be a live collection > PASS Matching the context object > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt >index 8109cb16e5f8e647589603ebc8686717d847dcd2..1f892fe9cce07b11d367210421fec149555015ca 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagNameNS-expected.txt >@@ -12,6 +12,7 @@ PASS BODY element in test namespace, prefix > PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*') > PASS getElementsByTagNameNS('*', '*') > PASS Empty lists >+PASS getElementsByTagNameNS() should be a live collection > PASS Matching the context object (wildcard namespace) > PASS Matching the context object (specific namespace) > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes-expected.txt >index ead9d03a5c47f74d68becba3e7fa6d94fcbced1e..d6aa59acd77ef88e7de3eb21ac558769a0505e5c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes-expected.txt >@@ -4,4 +4,5 @@ PASS Node.childNodes on an Element. > PASS Node.childNodes on a DocumentFragment. > PASS Node.childNodes on a Document. > PASS Iterator behavior of Node.childNodes >+PASS Node.childNodes should be a live collection > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes.html >index f7586fa74a9a22428d63ebcb081c2cef54d4cfdf..0d38df37b2d044f4da2237fa7c1dc090fc817b27 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-childNodes.html >@@ -7,6 +7,9 @@ > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> > <div id="log"></div> >+<div style="display: none"> >+ <ul id='test'><li>1</li><li>2</li><li>3</li><li>4</li></ul> >+</div> > <script> > test(function() { > var element = document.createElement("p"); >@@ -96,4 +99,19 @@ test(function() { > assert_equals(list.entries, Array.prototype.entries); > assert_equals(list.forEach, Array.prototype.forEach); > }, "Iterator behavior of Node.childNodes"); >+ >+ >+test(() => { >+ var node = document.getElementById("test"); >+ var children = node.childNodes; >+ assert_true(children instanceof NodeList); >+ var li = document.createElement("li"); >+ assert_equals(children.length, 4); >+ >+ node.appendChild(li); >+ assert_equals(children.length, 5); >+ >+ node.removeChild(li); >+ assert_equals(children.length, 4); >+}, "Node.childNodes should be a live collection"); > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt >index 4fca2a74411a4dfa04685511be23d6d5718c689b..42878d6ecfc8aa244c29fc17b9188cba3d9c9b38 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode-expected.txt >@@ -128,7 +128,8 @@ PASS createElementNS HTML > PASS createElementNS non-HTML > PASS createProcessingInstruction > PASS implementation.createDocumentType >-FAIL implementation.createDocument assert_equals: origin value expected "null" but got "http://localhost:8800" >+PASS implementation.createDocument > PASS implementation.createHTMLDocument > PASS node with children >+PASS Node with custom prototype > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode.html >index 6c8663076a413ee4cf6506f00cce384c1125e7bb..08d620b3b80c483835f5e339c19b885ad036ea27 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-cloneNode.html >@@ -240,7 +240,6 @@ test(function() { > assert_equals(doc.contentType, copy.contentType, "contentType equality"); > assert_equals(doc.URL, "about:blank", "URL value") > assert_equals(doc.URL, copy.URL, "URL equality"); >- assert_equals(doc.origin, "null", "origin value") > assert_equals(doc.origin, copy.origin, "origin equality"); > assert_equals(doc.compatMode, "CSS1Compat", "compatMode value"); > assert_equals(doc.compatMode, copy.compatMode, "compatMode equality"); >@@ -286,4 +285,17 @@ test(function() { > assert_equals(copy.childNodes.length, 0, > "copy.childNodes.length with non-deep copy"); > }, "node with children"); >+ >+test(() => { >+ const proto = Object.create(HTMLElement.prototype), >+ node = document.createElement("hi"); >+ Object.setPrototypeOf(node, proto); >+ assert_true(proto.isPrototypeOf(node)); >+ const clone = node.cloneNode(); >+ assert_false(proto.isPrototypeOf(clone)); >+ assert_true(HTMLUnknownElement.prototype.isPrototypeOf(clone)); >+ const deepClone = node.cloneNode(true); >+ assert_false(proto.isPrototypeOf(deepClone)); >+ assert_true(HTMLUnknownElement.prototype.isPrototypeOf(deepClone)); >+}, "Node with custom prototype") > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize-expected.txt >index 59db5e12e4f2134cab181184218a6a000fb96730..d45884b47700d3bb49c7f07db9b54f7c40e5a4b7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize-expected.txt >@@ -2,4 +2,5 @@ > PASS Node.normalize() > PASS Empty text nodes separated by a non-empty text node > PASS Empty text nodes >+PASS Non-text nodes with empty textContent values. > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize.html >index 7598852e60a96af26933b6e2141d4941b3ea23b9..4d455996e553c91be5a2de60c066b13d52144000 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-normalize.html >@@ -51,4 +51,33 @@ test(function() { > div.normalize(); > assert_array_equals(div.childNodes, []) > }, "Empty text nodes") >+ >+// The specification for normalize is clear that only "exclusive Text >+// nodes" are to be modified. This excludes CDATASection nodes, which >+// derive from Text. Naïve implementations may fail to skip >+// CDATASection nodes, or even worse, try to test textContent or >+// nodeValue without taking care to check the node type. They will >+// fail this test. >+test(function() { >+ // We create an XML document so that we can create CDATASection. >+ // Except for the CDATASection the result should be the same for >+ // an HTML document. (No non-Text node should be touched.) >+ var doc = new DOMParser().parseFromString("<div/>", "text/xml") >+ var div = doc.documentElement >+ var t1 = div.appendChild(doc.createTextNode("a")) >+ // The first parameter is the "target" of the processing >+ // instruction, and the 2nd is the text content. >+ var t2 = div.appendChild(doc.createProcessingInstruction("pi", "")) >+ var t3 = div.appendChild(doc.createTextNode("b")) >+ var t4 = div.appendChild(doc.createCDATASection("")) >+ var t5 = div.appendChild(doc.createTextNode("c")) >+ var t6 = div.appendChild(doc.createComment("")) >+ var t7 = div.appendChild(doc.createTextNode("d")) >+ var t8 = div.appendChild(doc.createElement("el")) >+ var t9 = div.appendChild(doc.createTextNode("e")) >+ var expected = [t1, t2, t3, t4, t5, t6, t7, t8, t9] >+ assert_array_equals(div.childNodes, expected) >+ div.normalize() >+ assert_array_equals(div.childNodes, expected) >+}, "Non-text nodes with empty textContent values.") > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0c4b9129cb8a19e6ab04a532af0d46a28696d546 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS ParentNode.children should be a live collection >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6621e7d9def48998609d7cc988b4f8253490f7e7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<meta charset=utf-8> >+<title>ParentNode.children</title> >+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-children"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="log"></div> >+<div style="display: none"> >+ <ul><li id='test'>1</li><li>2</li><li>3</li><li>4</li></ul> >+</div> >+<script> >+test(() => { >+ var node = document.getElementById("test"); >+ var parentNode = node.parentNode; >+ var children = parentNode.children; >+ assert_true(children instanceof HTMLCollection); >+ var li = document.createElement("li"); >+ assert_equals(children.length, 4); >+ >+ parentNode.appendChild(li); >+ assert_equals(children.length, 5); >+ >+ parentNode.removeChild(li); >+ assert_equals(children.length, 4); >+}, "ParentNode.children should be a live collection"); >+</script> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/getElementsByClassName-30-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/getElementsByClassName-30-expected.txt >index 896cfb077c31b13224239260bad8ee94e5bcce53..9b952717d0681bad2c6792ba521d87f0a3b1127a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/getElementsByClassName-30-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/getElementsByClassName-30-expected.txt >@@ -26,7 +26,6 @@ pre > q s samp small span strike strong sub sup colgroup > caption > th >-td >- tt u >+td tt u > ul > var >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ae2cd7acf27e403d6a94205042dbc365f8f1f37e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event-expected.txt >@@ -0,0 +1,4 @@ >+ >+ >+PASS document.querySelector(":target") must work when called in the window.load event >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2835286f96dc78f4d94a49f88347c10e85410d7e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html >@@ -0,0 +1,13 @@ >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<iframe></iframe> >+ >+<script> >+ let test = async_test('document.querySelector(":target") must work when called in the window.load event'); >+ let iframe = document.querySelector("iframe"); >+ window.addEventListener("message", test.step_func_done(event => { >+ assert_equals(event.data, "PASS"); >+ })); >+ iframe.src = "./query-target-in-load-event.part.html#target"; >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7eb1baf15f05f95545a563fe216eac0655c38a74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html >@@ -0,0 +1,10 @@ >+<!-- Used by ./query-target-in-load-event.html --> >+<script> >+ window.onload = function() { >+ let target = document.querySelector(":target"); >+ let expected = document.querySelector("#target"); >+ window.parent.postMessage(target == expected ? "PASS" : "FAIL", "*"); >+ }; >+</script> >+ >+<div id="target"></div> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/w3c-import.log >index 552b9ce19cdbaf0d9367637eba51bf5d23444741..135b59b839d033b16e191efd080c1c9cdd279f17 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/w3c-import.log >@@ -58,6 +58,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-createTreeWalker.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-doctype.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementById.html >+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByClassName.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName-xhtml.xhtml > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagName.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Document-getElementsByTagNameNS.html >@@ -144,6 +145,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Node-textContent.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/NodeList-Iterable.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-append.html >+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-children.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-prepend.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/ParentNode-querySelector-All-content.xht >@@ -198,6 +200,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/mutationobservers.js > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/prepend-on-Document.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/productions.js >+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.html >+/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/query-target-in-load-event.part.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/remove-unscopable.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/rootNode.html > /LayoutTests/imported/w3c/web-platform-tests/dom/nodes/selectors.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..773239de46a7711056c15649207a42972a27cc42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2-expected.txt >@@ -0,0 +1,4 @@ >+s0s1s2 >+ >+FAIL Range.intersectsNode() simple cases assert_false: [s0] range.intersectsNode(s1) expected false got true >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html >new file mode 100644 >index 0000000000000000000000000000000000000000..48072d98af692c325f5f7970dd3a28114306b913 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html >@@ -0,0 +1,36 @@ >+<!doctype htlml> >+<title>Range.intersectsNode</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id="div"><span id="s0">s0</span><span id="s1">s1</span><span id="s2">s2</span></div> >+<script> >+// Taken from Chromium bug: http://crbug.com/822510 >+test(() => { >+ const range = new Range(); >+ const div = document.getElementById('div'); >+ const s0 = document.getElementById('s0'); >+ const s1 = document.getElementById('s1'); >+ const s2 = document.getElementById('s2'); >+ >+ // Range encloses s0 >+ range.setStart(div, 0); >+ range.setEnd(div, 1); >+ assert_true(range.intersectsNode(s0), '[s0] range.intersectsNode(s0)'); >+ assert_false(range.intersectsNode(s1), '[s0] range.intersectsNode(s1)'); >+ assert_false(range.intersectsNode(s2), '[s0] range.intersectsNode(s2)'); >+ >+ // Range encloses s1 >+ range.setStart(div, 1); >+ range.setEnd(div, 2); >+ assert_false(range.intersectsNode(s0), '[s1] range.intersectsNode(s0)'); >+ assert_true(range.intersectsNode(s1), '[s1] range.intersectsNode(s1)'); >+ assert_false(range.intersectsNode(s2), '[s1] range.intersectsNode(s2)'); >+ >+ // Range encloses s2 >+ range.setStart(div, 2); >+ range.setEnd(div, 3); >+ assert_false(range.intersectsNode(s0), '[s2] range.intersectsNode(s0)'); >+ assert_false(range.intersectsNode(s1), '[s2] range.intersectsNode(s1)'); >+ assert_true(range.intersectsNode(s2), '[s2] range.intersectsNode(s2)'); >+}, 'Range.intersectsNode() simple cases'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/w3c-import.log >index 11b4285c2520169be9ba4c7ec6ff216db0cc57ba..a7577afe7c24c8103fc73b80af50be4c52427e96 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/w3c-import.log >@@ -28,6 +28,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-detach.html > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-extractContents.html > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-insertNode.html >+/LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-2.html > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode-binding.html > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-intersectsNode.html > /LayoutTests/imported/w3c/web-platform-tests/dom/ranges/Range-isPointInRange.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/dom/traversal/NodeIterator.html b/LayoutTests/imported/w3c/web-platform-tests/dom/traversal/NodeIterator.html >index 677858d2a51c03de1f120a97679740e00fdb6af5..3db5dec0707c82b0bf6c03f5486fe2257ad2498e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/dom/traversal/NodeIterator.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/dom/traversal/NodeIterator.html >@@ -200,20 +200,15 @@ var callbacks = [ > "(function(node) { return node.nodeName[0] == '#' })", > ]; > >-var tests = []; > for (var i = 0; i < testNodes.length; i++) { > for (var j = 0; j < whatToShows.length; j++) { > for (var k = 0; k < callbacks.length; k++) { >- tests.push([ >- "document.createNodeIterator(" + testNodes[i] >- + ", " + whatToShows[j] + ", " + callbacks[k] + ")", >- eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k]) >- ]); >+ test(() => { >+ testIterator(eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])); >+ }, "document.createNodeIterator(" + testNodes[i] + ", " + whatToShows[j] + ", " + callbacks[k] + ")"); > } > } > } > >-generate_tests(testIterator, tests); >- > testDiv.style.display = "none"; > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3dd7ecc3f3b70e17f368ace0c528bb37f92e4f27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any-expected.txt >@@ -0,0 +1,26 @@ >+CONSOLE MESSAGE: line 331: callback not yet supported >+ >+FAIL Test driver promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.html b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.js b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.js >new file mode 100644 >index 0000000000000000000000000000000000000000..4eaeabea85dd350cdc0f128051dae917e4ada55b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.js >@@ -0,0 +1,16 @@ >+// META: script=/resources/WebIDLParser.js >+// META: script=/resources/idlharness.js >+ >+'use strict'; >+ >+// https://w3c.github.io/DOM-Parsing/ >+ >+promise_test(async () => { >+ const dom = await fetch('/interfaces/dom.idl').then(r => r.text()); >+ const idl = await fetch('/interfaces/DOM-Parsing.idl').then(r => r.text()); >+ const idlArray = new IdlArray(); >+ idlArray.add_untested_idls(dom); >+ idlArray.add_idls(idl); >+ idlArray.test(); >+ done(); >+}, 'Test driver'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e6f17e4d6c68fe22d19c68bc2242ee8b636ccdcf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker-expected.txt >@@ -0,0 +1,25 @@ >+ >+FAIL Test driver promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >+[ >+ { >+ "type": "other", >+ "value": "{" >+ }, >+ { >+ "type": "string", >+ "value": "\"error\"" >+ }, >+ { >+ "type": "other", >+ "value": ":" >+ }, >+ { >+ "type": "whitespace", >+ "value": " " >+ }, >+ { >+ "type": "other", >+ "value": "{" >+ } >+]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker.html b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2382913528e693b3a5d56c660a45060980b548c3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.worker.html >@@ -0,0 +1 @@ >+<!-- This file is required for WebKit test infrastructure to run the templated test --> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/domparsing/w3c-import.log >index 9f8e8aca5aa4e07d14d5289dbee5c2dd41781a9a..59bff7635387a71630cf5c45e7a7ae7f6819de29 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/domparsing/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/w3c-import.log >@@ -28,6 +28,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/domparsing/insert-adjacent.html > /LayoutTests/imported/w3c/web-platform-tests/domparsing/insert_adjacent_html.html > /LayoutTests/imported/w3c/web-platform-tests/domparsing/insert_adjacent_html.js >+/LayoutTests/imported/w3c/web-platform-tests/domparsing/interfaces.any.js > /LayoutTests/imported/w3c/web-platform-tests/domparsing/outerhtml-01.html > /LayoutTests/imported/w3c/web-platform-tests/domparsing/outerhtml-02.html > /LayoutTests/imported/w3c/web-platform-tests/domparsing/xml-serialization.xhtml >+/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5968eeceda9ec589468f0e51b36a22f90111dba >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL XML Dom Parse readyState Test assert_equals: expected "complete" but got "interactive" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser.html b/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9dac65d3053a6f5e531888a7b470051389840f89 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/domparsing/xmldomparser.html >@@ -0,0 +1,13 @@ >+<!doctype html> >+<meta charset="utf-8"> >+<title>XML Dom Parse readyState Test</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ test(function () { >+ assert_equals( >+ (new DOMParser()).parseFromString("<html></html>", "text/xml").readyState, >+ "complete" >+ ); >+ }); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-constructor-non-same-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-constructor-non-same-origin-expected.txt >index 69cbd3bcf04066762a2d25fbb4081ebab03e905b..857951e96234abec2c989ae3ed0128ec7767f33b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-constructor-non-same-origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-constructor-non-same-origin-expected.txt >@@ -1,11 +1,7 @@ >-CONSOLE MESSAGE: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: EventSource cannot load ftp://example.not/ due to access control checks. >-CONSOLE MESSAGE: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: EventSource cannot load about:blank due to access control checks. >-CONSOLE MESSAGE: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: EventSource cannot load mailto:whatwg@awesome.example due to access control checks. >-CONSOLE MESSAGE: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: EventSource cannot load javascript:alert('FAIL') due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load ftp://example.not/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: EventSource cannot load about:blank. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: EventSource cannot load mailto:whatwg@awesome.example. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: EventSource cannot load javascript:alert('FAIL'). Cross origin requests are only supported for HTTP. > > PASS EventSource: constructor (act as if there is a network error) (ftp://example.not/) > PASS EventSource: constructor (act as if there is a network error) (about:blank) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-cross-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-cross-origin-expected.txt >index 00f7fc31fedaa808708a06277970a72983ffadda..e1fc4e2e17e4efa01fb5fd4700790fe83ec23afa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-cross-origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/eventsource/eventsource-cross-origin-expected.txt >@@ -1,15 +1,15 @@ > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message. > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=redirect&location=/eventsource/resources/cors.py?run=message >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=redirect&location=/eventsource/resources/cors.py?run=message due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=redirect&location=/eventsource/resources/cors.py?run=message. > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=status-reconnect&status=200 >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=status-reconnect&status=200 due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=status-reconnect&status=200. > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin=http://example.org >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin=http://example.org due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin=http://example.org. > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin= >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin= due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/cors.py?run=message&origin=. > Blocked access to external URL http://xn--lve-6lad.localhost:8800/eventsource/resources/message.py >-CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/message.py due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://xn--lve-6lad.localhost:8800/eventsource/resources/message.py. > > Harness Error (TIMEOUT), message = null > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/eventsource/interfaces-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/eventsource/interfaces-expected.txt >index 350f21f73cd666043f2e402057db4e3a6dc2000d..08429b2384e8d34a02b426240984080148575fd0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/eventsource/interfaces-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/eventsource/interfaces-expected.txt >@@ -1,6 +1,6 @@ > CONSOLE MESSAGE: line 331: callback not yet supported > Blocked access to external URL http://foo/ >-CONSOLE MESSAGE: EventSource cannot load http://foo/ due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://foo/. > EventSource IDL tests > > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/eventsource/request-cache-control-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/eventsource/request-cache-control-expected.txt >index 73f5676bf2c29a5bc1aa867624222cfcf496cb01..8d006ff28abf63e00901d185c4af3805df799906 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/eventsource/request-cache-control-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/eventsource/request-cache-control-expected.txt >@@ -1,5 +1,5 @@ > Blocked access to external URL http://www2.localhost:8800/eventsource/resources/cors.py?run=cache-control >-CONSOLE MESSAGE: EventSource cannot load http://www2.localhost:8800/eventsource/resources/cors.py?run=cache-control due to access control checks. >+CONSOLE MESSAGE: EventSource cannot load http://www2.localhost:8800/eventsource/resources/cors.py?run=cache-control. > > Harness Error (TIMEOUT), message = null > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9C.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9C.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..70082ea8db76a8c6b3e39101f6546496bde4d043 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9C.pem >@@ -0,0 +1,83 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 335516 (0x51e9c) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:29:43 2018 GMT >+ Not After : Jul 4 20:29:43 2018 GMT >+ Subject: CN=web-platform-tests >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:b4:6d:23:6f:dc:ff:a0:9d:8b:24:57:4e:0b:fd: >+ 88:f7:fe:a7:5b:07:5c:41:a3:d6:ad:04:56:b8:ec: >+ 50:22:df:bb:ac:27:af:43:39:79:49:46:52:e5:bf: >+ 8c:98:c6:45:19:4c:ee:01:ed:94:ea:0c:da:f2:7c: >+ 30:40:f2:47:e6:4b:00:bc:e4:1a:fa:f1:fd:10:57: >+ 41:22:1f:78:d3:66:e0:34:6d:25:a6:59:ad:16:b6: >+ 9f:fd:b8:b6:2a:09:bd:a1:e8:a2:e8:7b:27:61:bf: >+ 06:1b:c1:ae:5e:8d:ef:7a:ea:96:e4:95:be:c2:b3: >+ 93:81:35:b5:a4:a4:6c:f5:51:bf:17:65:1c:90:6e: >+ df:73:40:21:cd:0e:6f:72:a8:5b:54:18:f7:76:69: >+ bd:9b:95:9f:0a:6a:d5:00:0a:19:35:49:1f:0c:d8: >+ ec:39:3b:9d:41:35:25:9d:92:93:b5:82:0f:7a:2f: >+ 04:e0:61:87:6a:2c:4f:74:41:db:c7:e2:31:35:50: >+ 30:a4:bc:47:18:ba:1c:cd:70:75:6e:5d:ee:2f:de: >+ 19:7c:e2:14:c1:35:79:2a:34:b9:70:3d:12:03:14: >+ 53:d8:aa:9b:aa:12:b7:f0:1b:8c:45:6e:c5:72:5a: >+ c9:4c:c1:1a:85:72:ad:e5:6e:a7:f3:be:f9:18:39: >+ 7b:6d >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:TRUE >+ X509v3 Subject Key Identifier: >+ 79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ DirName:/CN=web-platform-tests >+ serial:05:1E:9C >+ >+ X509v3 Key Usage: >+ Certificate Sign >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ Signature Algorithm: sha256WithRSAEncryption >+ 19:26:c0:d3:1f:d8:b6:f7:e7:55:02:aa:54:1f:1c:d9:67:22: >+ 8e:7b:4a:9b:a4:c4:94:2d:d4:b3:2b:0b:c8:3e:ee:51:9a:02: >+ 7d:c0:72:2d:10:23:d2:ca:d3:73:af:db:0d:5a:e5:b7:aa:b0: >+ a1:53:79:28:7c:6e:4d:41:20:83:3b:07:53:0c:91:e6:d2:36: >+ 61:aa:5f:ae:6e:b3:4c:07:bb:82:c1:ec:e7:25:2d:8a:91:40: >+ a7:62:bc:08:f8:40:d4:a0:b2:88:f6:45:99:6e:6a:fd:92:7d: >+ 26:ff:87:55:26:63:6a:4f:ba:0b:b7:62:52:25:4a:b9:11:5d: >+ 8c:e8:73:d7:39:ba:95:83:49:6d:53:9e:7c:c7:1c:22:41:dd: >+ ee:8b:8f:6b:70:c4:e4:ee:b0:75:18:d6:6d:3e:db:69:bf:45: >+ c5:f5:57:b9:40:d8:83:9b:53:f2:2c:58:55:06:0b:1d:88:41: >+ 76:39:c5:d6:12:4d:d8:92:cf:d9:27:44:16:7e:a3:c3:ec:1f: >+ b1:18:8a:df:75:0a:a3:f2:40:34:0a:ea:23:aa:63:56:5e:f3: >+ 8d:ea:4a:05:1e:76:40:ca:77:f6:ba:9a:28:d0:e2:74:cb:ac: >+ cb:14:05:ee:32:12:18:70:db:e0:fa:4d:57:28:ed:06:04:fb: >+ 22:59:c8:ff >+-----BEGIN CERTIFICATE----- >+MIIDUzCCAjugAwIBAgIDBR6cMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl >+Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODA2MDQyMDI5NDNaFw0xODA3MDQyMDI5NDNa >+MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB >+BQADggEPADCCAQoCggEBALRtI2/c/6CdiyRXTgv9iPf+p1sHXEGj1q0EVrjsUCLf >+u6wnr0M5eUlGUuW/jJjGRRlM7gHtlOoM2vJ8MEDyR+ZLALzkGvrx/RBXQSIfeNNm >+4DRtJaZZrRa2n/24tioJvaHoouh7J2G/BhvBrl6N73rqluSVvsKzk4E1taSkbPVR >+vxdlHJBu33NAIc0Ob3KoW1QY93ZpvZuVnwpq1QAKGTVJHwzY7Dk7nUE1JZ2Sk7WC >+D3ovBOBhh2osT3RB28fiMTVQMKS8Rxi6HM1wdW5d7i/eGXziFME1eSo0uXA9EgMU >+U9iqm6oSt/AbjEVuxXJayUzBGoVyreVup/O++Rg5e20CAwEAAaOBmzCBmDAMBgNV >+HRMEBTADAQH/MB0GA1UdDgQWBBR5J+MmBnNCUuc/aaBLOndmEnHq+jBHBgNVHSME >+QDA+gBR5J+MmBnNCUuc/aaBLOndmEnHq+qEhpB8wHTEbMBkGA1UEAwwSd2ViLXBs >+YXRmb3JtLXRlc3RzggMFHpwwCwYDVR0PBAQDAgIEMBMGA1UdJQQMMAoGCCsGAQUF >+BwMBMA0GCSqGSIb3DQEBCwUAA4IBAQAZJsDTH9i29+dVAqpUHxzZZyKOe0qbpMSU >+LdSzKwvIPu5RmgJ9wHItECPSytNzr9sNWuW3qrChU3kofG5NQSCDOwdTDJHm0jZh >+ql+ubrNMB7uCweznJS2KkUCnYrwI+EDUoLKI9kWZbmr9kn0m/4dVJmNqT7oLt2JS >+JUq5EV2M6HPXObqVg0ltU558xxwiQd3ui49rcMTk7rB1GNZtPttpv0XF9Ve5QNiD >+m1PyLFhVBgsdiEF2OcXWEk3Yks/ZJ0QWfqPD7B+xGIrfdQqj8kA0CuojqmNWXvON >+6koFHnZAynf2upoo0OJ0y6zLFAXuMhIYcNvg+k1XKO0GBPsiWcj/ >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9D.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9D.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..96136ba63a0c00481c97654d3b289cbb62c5da76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/051E9D.pem >@@ -0,0 +1,85 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 335517 (0x51e9d) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:29:45 2018 GMT >+ Not After : Jul 4 20:29:45 2018 GMT >+ Subject: CN=localhost >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:a4:65:10:39:94:c3:d1:04:d8:85:53:2b:35:27: >+ fe:14:94:fc:07:90:86:dc:33:94:24:51:85:fc:af: >+ bb:68:73:2b:6a:3f:9a:0e:88:3e:d9:c8:11:d8:0f: >+ 37:37:9a:72:53:60:ba:61:82:4f:39:c9:89:b3:93: >+ 2b:c5:96:1b:12:93:27:99:26:71:70:4e:d6:05:b8: >+ 2c:e2:48:ef:7e:2c:62:08:dd:3f:01:87:82:a0:d5: >+ f9:b4:f6:8d:8c:81:01:7b:9e:2a:1e:0b:1c:d9:3c: >+ 7a:cf:8d:b0:97:61:ba:5b:24:3e:f8:eb:32:a4:49: >+ da:19:49:3d:49:6a:1b:dd:0c:8c:cc:37:74:cf:ea: >+ 13:fd:fa:e7:9e:01:ed:69:fb:ae:c8:78:e9:02:90: >+ 88:0e:cf:38:a1:32:b6:8f:d1:e8:19:63:bd:75:81: >+ 7b:39:da:0d:a6:17:37:ac:16:e0:b3:29:d9:78:f0: >+ 09:43:61:cd:87:b4:78:af:d1:55:70:01:84:75:6d: >+ 37:7e:5c:48:0b:af:3c:f0:73:c6:36:6a:a2:bd:76: >+ 09:91:3e:79:65:49:21:8a:4c:b0:42:6c:23:e5:96: >+ e8:39:b1:77:37:14:d0:02:17:0c:cd:35:a3:3d:8f: >+ a1:cf:fc:e1:0c:a4:71:be:74:b9:d9:8c:7a:bd:55: >+ 60:69 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:FALSE >+ X509v3 Subject Key Identifier: >+ DB:3D:A9:8A:13:5F:E1:29:C0:57:41:B1:95:ED:14:93:D2:21:26:2C >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ >+ X509v3 Key Usage: >+ Digital Signature, Non Repudiation, Key Encipherment >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ X509v3 Subject Alternative Name: >+ DNS:localhost, DNS:www.localhost, DNS:xn--n8j6ds53lwwkrqhv28a.localhost, DNS:xn--lve-6lad.localhost, DNS:www2.localhost, DNS:www1.localhost >+ Signature Algorithm: sha256WithRSAEncryption >+ 46:2d:83:76:b2:7c:ce:21:a7:73:6e:86:56:0b:6d:0b:9e:65: >+ 35:3f:36:f3:c8:9b:1f:38:c1:d3:ab:63:69:19:c2:2c:cf:7f: >+ ac:5c:ef:a2:90:3f:0f:6e:b0:8c:e8:c4:a2:52:5a:5e:39:1e: >+ dc:ad:ee:4d:ef:58:44:88:d2:64:21:b3:f1:1b:15:ad:f0:4c: >+ 74:fc:94:0b:ea:12:f9:56:c8:71:ed:b3:4a:14:fe:df:43:11: >+ 62:20:20:78:4c:95:8e:56:93:6b:4f:7b:9c:38:a2:97:d9:05: >+ 38:18:6e:fc:a3:15:5d:01:87:83:22:94:2a:7e:91:c1:3c:51: >+ 24:0e:c6:21:58:70:32:b0:34:69:25:6d:02:35:9d:e4:81:c9: >+ 6f:21:da:82:cb:ca:96:19:56:04:dc:fb:89:bc:1c:a3:b9:42: >+ 74:13:86:ca:75:60:73:33:1d:59:ad:48:73:28:89:32:8b:cd: >+ e1:5d:95:53:b3:ef:c6:f2:ce:86:8d:57:45:fa:f2:e3:ff:73: >+ 6c:55:60:8c:ea:7d:34:bf:2a:6b:a8:56:b8:88:53:65:be:b7: >+ 0e:4a:b1:c1:4b:ba:40:fe:06:f8:94:c8:a2:32:ba:9f:b3:de: >+ da:e5:24:8c:88:dc:f9:02:84:b7:4a:1c:fc:13:bc:b6:c0:87: >+ dc:2e:8b:73 >+-----BEGIN CERTIFICATE----- >+MIIDnzCCAoegAwIBAgIDBR6dMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl >+Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODA2MDQyMDI5NDVaFw0xODA3MDQyMDI5NDVa >+MBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC >+AQoCggEBAKRlEDmUw9EE2IVTKzUn/hSU/AeQhtwzlCRRhfyvu2hzK2o/mg6IPtnI >+EdgPNzeaclNgumGCTznJibOTK8WWGxKTJ5kmcXBO1gW4LOJI734sYgjdPwGHgqDV >++bT2jYyBAXueKh4LHNk8es+NsJdhulskPvjrMqRJ2hlJPUlqG90MjMw3dM/qE/36 >+554B7Wn7rsh46QKQiA7POKEyto/R6BljvXWBeznaDaYXN6wW4LMp2XjwCUNhzYe0 >+eK/RVXABhHVtN35cSAuvPPBzxjZqor12CZE+eWVJIYpMsEJsI+WW6DmxdzcU0AIX >+DM01oz2Poc/84Qykcb50udmMer1VYGkCAwEAAaOB8DCB7TAJBgNVHRMEAjAAMB0G >+A1UdDgQWBBTbPamKE1/hKcBXQbGV7RST0iEmLDAfBgNVHSMEGDAWgBR5J+MmBnNC >+Uuc/aaBLOndmEnHq+jALBgNVHQ8EBAMCBeAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw >+fgYDVR0RBHcwdYIJbG9jYWxob3N0gg13d3cubG9jYWxob3N0giF4bi0tbjhqNmRz >+NTNsd3drcnFodjI4YS5sb2NhbGhvc3SCFnhuLS1sdmUtNmxhZC5sb2NhbGhvc3SC >+Dnd3dzIubG9jYWxob3N0gg53d3cxLmxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOC >+AQEARi2DdrJ8ziGnc26GVgttC55lNT8288ibHzjB06tjaRnCLM9/rFzvopA/D26w >+jOjEolJaXjke3K3uTe9YRIjSZCGz8RsVrfBMdPyUC+oS+VbIce2zShT+30MRYiAg >+eEyVjlaTa097nDiil9kFOBhu/KMVXQGHgyKUKn6RwTxRJA7GIVhwMrA0aSVtAjWd >+5IHJbyHagsvKlhlWBNz7ibwco7lCdBOGynVgczMdWa1IcyiJMovN4V2VU7PvxvLO >+ho1XRfry4/9zbFVgjOp9NL8qa6hWuIhTZb63DkqxwUu6QP4G+JTIojK6n7Pe2uUk >+jIjc+QKEt0oc/BO8tsCH3C6Lcw== >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cacert.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cacert.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..70082ea8db76a8c6b3e39101f6546496bde4d043 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cacert.pem >@@ -0,0 +1,83 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 335516 (0x51e9c) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:29:43 2018 GMT >+ Not After : Jul 4 20:29:43 2018 GMT >+ Subject: CN=web-platform-tests >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:b4:6d:23:6f:dc:ff:a0:9d:8b:24:57:4e:0b:fd: >+ 88:f7:fe:a7:5b:07:5c:41:a3:d6:ad:04:56:b8:ec: >+ 50:22:df:bb:ac:27:af:43:39:79:49:46:52:e5:bf: >+ 8c:98:c6:45:19:4c:ee:01:ed:94:ea:0c:da:f2:7c: >+ 30:40:f2:47:e6:4b:00:bc:e4:1a:fa:f1:fd:10:57: >+ 41:22:1f:78:d3:66:e0:34:6d:25:a6:59:ad:16:b6: >+ 9f:fd:b8:b6:2a:09:bd:a1:e8:a2:e8:7b:27:61:bf: >+ 06:1b:c1:ae:5e:8d:ef:7a:ea:96:e4:95:be:c2:b3: >+ 93:81:35:b5:a4:a4:6c:f5:51:bf:17:65:1c:90:6e: >+ df:73:40:21:cd:0e:6f:72:a8:5b:54:18:f7:76:69: >+ bd:9b:95:9f:0a:6a:d5:00:0a:19:35:49:1f:0c:d8: >+ ec:39:3b:9d:41:35:25:9d:92:93:b5:82:0f:7a:2f: >+ 04:e0:61:87:6a:2c:4f:74:41:db:c7:e2:31:35:50: >+ 30:a4:bc:47:18:ba:1c:cd:70:75:6e:5d:ee:2f:de: >+ 19:7c:e2:14:c1:35:79:2a:34:b9:70:3d:12:03:14: >+ 53:d8:aa:9b:aa:12:b7:f0:1b:8c:45:6e:c5:72:5a: >+ c9:4c:c1:1a:85:72:ad:e5:6e:a7:f3:be:f9:18:39: >+ 7b:6d >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:TRUE >+ X509v3 Subject Key Identifier: >+ 79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ DirName:/CN=web-platform-tests >+ serial:05:1E:9C >+ >+ X509v3 Key Usage: >+ Certificate Sign >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ Signature Algorithm: sha256WithRSAEncryption >+ 19:26:c0:d3:1f:d8:b6:f7:e7:55:02:aa:54:1f:1c:d9:67:22: >+ 8e:7b:4a:9b:a4:c4:94:2d:d4:b3:2b:0b:c8:3e:ee:51:9a:02: >+ 7d:c0:72:2d:10:23:d2:ca:d3:73:af:db:0d:5a:e5:b7:aa:b0: >+ a1:53:79:28:7c:6e:4d:41:20:83:3b:07:53:0c:91:e6:d2:36: >+ 61:aa:5f:ae:6e:b3:4c:07:bb:82:c1:ec:e7:25:2d:8a:91:40: >+ a7:62:bc:08:f8:40:d4:a0:b2:88:f6:45:99:6e:6a:fd:92:7d: >+ 26:ff:87:55:26:63:6a:4f:ba:0b:b7:62:52:25:4a:b9:11:5d: >+ 8c:e8:73:d7:39:ba:95:83:49:6d:53:9e:7c:c7:1c:22:41:dd: >+ ee:8b:8f:6b:70:c4:e4:ee:b0:75:18:d6:6d:3e:db:69:bf:45: >+ c5:f5:57:b9:40:d8:83:9b:53:f2:2c:58:55:06:0b:1d:88:41: >+ 76:39:c5:d6:12:4d:d8:92:cf:d9:27:44:16:7e:a3:c3:ec:1f: >+ b1:18:8a:df:75:0a:a3:f2:40:34:0a:ea:23:aa:63:56:5e:f3: >+ 8d:ea:4a:05:1e:76:40:ca:77:f6:ba:9a:28:d0:e2:74:cb:ac: >+ cb:14:05:ee:32:12:18:70:db:e0:fa:4d:57:28:ed:06:04:fb: >+ 22:59:c8:ff >+-----BEGIN CERTIFICATE----- >+MIIDUzCCAjugAwIBAgIDBR6cMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl >+Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODA2MDQyMDI5NDNaFw0xODA3MDQyMDI5NDNa >+MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB >+BQADggEPADCCAQoCggEBALRtI2/c/6CdiyRXTgv9iPf+p1sHXEGj1q0EVrjsUCLf >+u6wnr0M5eUlGUuW/jJjGRRlM7gHtlOoM2vJ8MEDyR+ZLALzkGvrx/RBXQSIfeNNm >+4DRtJaZZrRa2n/24tioJvaHoouh7J2G/BhvBrl6N73rqluSVvsKzk4E1taSkbPVR >+vxdlHJBu33NAIc0Ob3KoW1QY93ZpvZuVnwpq1QAKGTVJHwzY7Dk7nUE1JZ2Sk7WC >+D3ovBOBhh2osT3RB28fiMTVQMKS8Rxi6HM1wdW5d7i/eGXziFME1eSo0uXA9EgMU >+U9iqm6oSt/AbjEVuxXJayUzBGoVyreVup/O++Rg5e20CAwEAAaOBmzCBmDAMBgNV >+HRMEBTADAQH/MB0GA1UdDgQWBBR5J+MmBnNCUuc/aaBLOndmEnHq+jBHBgNVHSME >+QDA+gBR5J+MmBnNCUuc/aaBLOndmEnHq+qEhpB8wHTEbMBkGA1UEAwwSd2ViLXBs >+YXRmb3JtLXRlc3RzggMFHpwwCwYDVR0PBAQDAgIEMBMGA1UdJQQMMAoGCCsGAQUF >+BwMBMA0GCSqGSIb3DQEBCwUAA4IBAQAZJsDTH9i29+dVAqpUHxzZZyKOe0qbpMSU >+LdSzKwvIPu5RmgJ9wHItECPSytNzr9sNWuW3qrChU3kofG5NQSCDOwdTDJHm0jZh >+ql+ubrNMB7uCweznJS2KkUCnYrwI+EDUoLKI9kWZbmr9kn0m/4dVJmNqT7oLt2JS >+JUq5EV2M6HPXObqVg0ltU558xxwiQd3ui49rcMTk7rB1GNZtPttpv0XF9Ve5QNiD >+m1PyLFhVBgsdiEF2OcXWEk3Yks/ZJ0QWfqPD7B+xGIrfdQqj8kA0CuojqmNWXvON >+6koFHnZAynf2upoo0OJ0y6zLFAXuMhIYcNvg+k1XKO0GBPsiWcj/ >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cakey.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cakey.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..3a84400f7e9df5b81a0e89f16cb60eedb5b66e04 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cakey.pem >@@ -0,0 +1,30 @@ >+-----BEGIN ENCRYPTED PRIVATE KEY----- >+MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIiCOr23yYgXECAggA >+MB0GCWCGSAFlAwQBKgQQ9RBBV+//A8nGzsjz+/zjywSCBNBVuKm7cXXtTJa58GFT >+hbLVqcTz0M+rc8w3KLXtK3cZbzOFVwcj6zlmUlCekQr11xFTBHv1nGP8ZaVV6RQP >+U9CxgJVppkwT3L3+O6AcNU5jfD7qKPOOeo8y6yVJu7HvAibQRKCQT5X9oKc1P9bj >+Jg0z/ONFLggHyvv/L+dUG41AsJRbT7ymaeKMbm6uxUkiVF9RtnTm4ay6qwKw6h5w >+/11HTS/u7AG7IaJEnqqdlOYypAHDSKIyWkZd14bemLnwKCqv1LG6JdWygwLzY0Xr >+TUx2HAngZmYJWdZl44d3Zu5mWHyyoo3ImUPPaP+lUZQxP+xjmUgH92tz6NWJ3eqS >+haG8GM4S9vuTIv8JL+JYthyexona7SnuC25vh1+FYQT7Y6Oyy8vkAqvkHOB+Mb8L >+tozWlsns5wwWjhGMrD6bnUHYUlm3XPPC9YaY0937V1KOm8SjfR/f4+QKEJbZWks/ >+G0SoBdDO8voTBt0NlRMc0dHjoFcMSQnla7dy8PFGeOC3OWgptFRgCpy+w6mPZqGC >+juCA8wJtuC557GSQbK4OPD2mYQJsSsj/2rOZYzJvlXu8XhJm2bwJmMs1L1bAgItI >+qSV0G6nsTfzmoE8hNf3hvzKkF2bw/5vWUKQ2xQ/9Fl5cJrbUj1Rqg/6Znt5o/nWQ >+xL/L/czLDYqE0yAI1M60thjiQdbvLfQZYkI3t4Fj+y3L6Qf8mx2VJ4zlhmAO4uO7 >+ZiIhUT8s7RPSk0mgXlzk1V1hGFHzMflmKhRDIBGGJ7Sscxq3s81mrg0Fe3zFsCeB >+wl9USwJqSuEMtDQTcTh1g+xL9Dmc2ZUOEGfnnTW2COMA72x8xJ4DOxojIQPCFMQS >+Lp4SFUFr44idBVtIfcmerE0fqULiSSCnxSXsGX/NyS9w6fouhO0dvMIbKKn1QZ6N >+R9o1yThQi2vTEnWnPnq1P2hYgLoxAD5HFV2mkt625nZF6WqBd3y+ExXgWYi9jkVV >+rIHjopSxq/bnelpr+VU7+7cxD8aSX4IEe8h4bx3UMnhFObVv9YnbhfbAGdr1wh0x >+CnKWePB0UUiHCHybYIyYYq2LMQXftqyEi6q866LP1+SBIt0UukVJ6o0DCuq7rqDV >+6RBuF+dUm7OHFdzzxp5QWsBcxM3ud6UVwn0JDe7tVW/KdY/UJ3itUazfLac9/M+g >+q3gojEkNaReGaiecwgtWuEYtb0/GuIBHZjszRD0Ais3n/xxkUs2mM5XjfhJ5k1Ok >+87nnwVhPOtiYSrvJpgSe+QxajeU1zugLEC7HOosnUJjjlR7HTi8v8qfnbLXeT/sO >+/NDzNa9QcEcKLIp/fJ7HgDHXArRIoAPKOa3XHDJxybNYgJzLExB6G/upIm7OERUj >+8Xb1IagazrH6/Tjse3texjOjPFhxe9s7C6jZX7xFZO9ueKpr9D/NW3UYmQ49jGUY >+0xTTlsqDwWqDOM3p5gaqXEuVBjfvvuh6n1/k+RBjbZUuVfuXeCRRF7wWiI30S+4t >+RMqmNqTEZJqOkNZ6gY/LRUeitce+mKSV+F5mkBWpY5RxjvO5MAHZFLSAQPm/53Ld >+kp68W4hxueOMhuDmxJDEvgucTb1PkjJUPhOo0Aif5X4PcVqKmIl7dHGYGmxx9Akn >+ywQiWP00LTrB10m47M9+2nqDOQ== >+-----END ENCRYPTED PRIVATE KEY----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..28965a1ef08216ea73df67cb9fa9cecbf50bc68f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt >@@ -0,0 +1,2 @@ >+V 180704202943Z 051E9C unknown /CN=web-platform-tests >+V 180704202945Z 051E9D unknown /CN=localhost >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr >new file mode 100644 >index 0000000000000000000000000000000000000000..8f7e63a3475ce82ed03dba035f5c01a42ca38c65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr >@@ -0,0 +1 @@ >+unique_subject = yes >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr.old >new file mode 100644 >index 0000000000000000000000000000000000000000..8f7e63a3475ce82ed03dba035f5c01a42ca38c65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.attr.old >@@ -0,0 +1 @@ >+unique_subject = yes >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.old >new file mode 100644 >index 0000000000000000000000000000000000000000..826673b684a6cf47dd8138d627e2eccbcf61ac2b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/index.txt.old >@@ -0,0 +1 @@ >+V 180704202943Z 051E9C unknown /CN=web-platform-tests >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.key b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.key >new file mode 100644 >index 0000000000000000000000000000000000000000..2b2951f9735101b72dd09051e97103105152b249 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.key >@@ -0,0 +1,28 @@ >+-----BEGIN PRIVATE KEY----- >+MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQCkZRA5lMPRBNiF >+Uys1J/4UlPwHkIbcM5QkUYX8r7tocytqP5oOiD7ZyBHYDzc3mnJTYLphgk85yYmz >+kyvFlhsSkyeZJnFwTtYFuCziSO9+LGII3T8Bh4Kg1fm09o2MgQF7nioeCxzZPHrP >+jbCXYbpbJD746zKkSdoZST1JahvdDIzMN3TP6hP9+ueeAe1p+67IeOkCkIgOzzih >+MraP0egZY711gXs52g2mFzesFuCzKdl48AlDYc2HtHiv0VVwAYR1bTd+XEgLrzzw >+c8Y2aqK9dgmRPnllSSGKTLBCbCPllug5sXc3FNACFwzNNaM9j6HP/OEMpHG+dLnZ >+jHq9VWBpAgMBAAECggEBAJItt46sBK8AsxNij+IVbK2aiLylO/Xj+0+MGitFi8xl >+1G4GnhNb/R8j8xH+/ad4sz4GndSEzbPhzIscS2jHf801gpmBAI/P2il9ypNwLV0x >+U/7z1MmkWHhxrDfIoLcWI15rlqHeWcmlKMMUB7mkUdQnV8N5SC+j58ZiRJfaPWqB >+CCWiG4ja40y2NxNCw6+JmX+qcsmJ9aFESEiRhIrEGX7UhmQgEHbK7PYMIj7nYv6H >+cIDgOnCrM9EuP/L78gysRGvqcXhsxAZBnJyYzqhvmxWp2Siwg+ra3++0cpieEU0z >+Tde2Nl2tLQZDtFdY/U/S4fg2v52cz/YEZqk7XXAmBA0CgYEA1l66ZPW0nqs7eqoe >+m2NL6lDKdBmUaMr4NFJGqhHDnIwLa7oX/RxNSCA8A51GF2oaN13gfeZGshnZIKpS >+5gRUbS+2P1+7e/3MN2qqfA7vHyJRdlimjFLGiap6LAlQXxCW6AYjGhT+EvB+cU2c >+ccqK1jxWOBIj7X/qLp0qMn4r9rsCgYEAxFHYzKmCzfY6y0180dINoJtIQ/s3fgdu >+wZWOsqRQ1G7M9dUyYDwwaRuzKiJN65llz1NTtWjB8gYU3n9zqv2qh4ZiV2mTUCes >+036emQQCFNuzwXjj6/NSLMey6YUpM/JNhNMtuh6ZMp4+EfV5LuFWoNZR48kZ67eI >+9r37C2tjXSsCgYEAqdRCNtmxTkK5zGQZ+2CfM/LtcS0StjKWkFzePr30CoGoSqAT >+gSJ61zkyUmq2rLYSLurgft2ABHkV2xsUscWcXSP/bhWZopFeyEho5/+s0S2O/AMf >+buvk/gtg3qJCWg36f7bc+DzJTJfalEi4OC4N78u9Qo6ch/teu68nTvlGOyECgYEA >+tQV7UQwkzuFyyS/EHnz/j85fTkAApTcZS2sqT1LwLVGVsEBL2SzmvqSKChnjm5Cw >+rgF5uFbGLvKon5kKAOsyKREi8NMqwMg0tjeU6icl/DGxiH5+O3z7ksr5EBZ3La0J >+CaboDSxVurTrKwgcG7wwctHsZIt0WUO9CTeYmqkE0E0CgYEAxZjbL2lSZv43d2pi >+eHJcrssHrwHAEX7WV9+cmRQ67FKvcFAW5mw3oPZ4poS3rq6qTqzikc1yVDJl3GvF >+b4P9wBVq8/+Mp3q/3Na/s569LnD5LvCAmT4C2SrGzwEXOQ5ey4c82foERmz6KVg+ >+31BxAbffZNrclOeNTfgr29QwGzU= >+-----END PRIVATE KEY----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..96136ba63a0c00481c97654d3b289cbb62c5da76 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.pem >@@ -0,0 +1,85 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 335517 (0x51e9d) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:29:45 2018 GMT >+ Not After : Jul 4 20:29:45 2018 GMT >+ Subject: CN=localhost >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:a4:65:10:39:94:c3:d1:04:d8:85:53:2b:35:27: >+ fe:14:94:fc:07:90:86:dc:33:94:24:51:85:fc:af: >+ bb:68:73:2b:6a:3f:9a:0e:88:3e:d9:c8:11:d8:0f: >+ 37:37:9a:72:53:60:ba:61:82:4f:39:c9:89:b3:93: >+ 2b:c5:96:1b:12:93:27:99:26:71:70:4e:d6:05:b8: >+ 2c:e2:48:ef:7e:2c:62:08:dd:3f:01:87:82:a0:d5: >+ f9:b4:f6:8d:8c:81:01:7b:9e:2a:1e:0b:1c:d9:3c: >+ 7a:cf:8d:b0:97:61:ba:5b:24:3e:f8:eb:32:a4:49: >+ da:19:49:3d:49:6a:1b:dd:0c:8c:cc:37:74:cf:ea: >+ 13:fd:fa:e7:9e:01:ed:69:fb:ae:c8:78:e9:02:90: >+ 88:0e:cf:38:a1:32:b6:8f:d1:e8:19:63:bd:75:81: >+ 7b:39:da:0d:a6:17:37:ac:16:e0:b3:29:d9:78:f0: >+ 09:43:61:cd:87:b4:78:af:d1:55:70:01:84:75:6d: >+ 37:7e:5c:48:0b:af:3c:f0:73:c6:36:6a:a2:bd:76: >+ 09:91:3e:79:65:49:21:8a:4c:b0:42:6c:23:e5:96: >+ e8:39:b1:77:37:14:d0:02:17:0c:cd:35:a3:3d:8f: >+ a1:cf:fc:e1:0c:a4:71:be:74:b9:d9:8c:7a:bd:55: >+ 60:69 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:FALSE >+ X509v3 Subject Key Identifier: >+ DB:3D:A9:8A:13:5F:E1:29:C0:57:41:B1:95:ED:14:93:D2:21:26:2C >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ >+ X509v3 Key Usage: >+ Digital Signature, Non Repudiation, Key Encipherment >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ X509v3 Subject Alternative Name: >+ DNS:localhost, DNS:www.localhost, DNS:xn--n8j6ds53lwwkrqhv28a.localhost, DNS:xn--lve-6lad.localhost, DNS:www2.localhost, DNS:www1.localhost >+ Signature Algorithm: sha256WithRSAEncryption >+ 46:2d:83:76:b2:7c:ce:21:a7:73:6e:86:56:0b:6d:0b:9e:65: >+ 35:3f:36:f3:c8:9b:1f:38:c1:d3:ab:63:69:19:c2:2c:cf:7f: >+ ac:5c:ef:a2:90:3f:0f:6e:b0:8c:e8:c4:a2:52:5a:5e:39:1e: >+ dc:ad:ee:4d:ef:58:44:88:d2:64:21:b3:f1:1b:15:ad:f0:4c: >+ 74:fc:94:0b:ea:12:f9:56:c8:71:ed:b3:4a:14:fe:df:43:11: >+ 62:20:20:78:4c:95:8e:56:93:6b:4f:7b:9c:38:a2:97:d9:05: >+ 38:18:6e:fc:a3:15:5d:01:87:83:22:94:2a:7e:91:c1:3c:51: >+ 24:0e:c6:21:58:70:32:b0:34:69:25:6d:02:35:9d:e4:81:c9: >+ 6f:21:da:82:cb:ca:96:19:56:04:dc:fb:89:bc:1c:a3:b9:42: >+ 74:13:86:ca:75:60:73:33:1d:59:ad:48:73:28:89:32:8b:cd: >+ e1:5d:95:53:b3:ef:c6:f2:ce:86:8d:57:45:fa:f2:e3:ff:73: >+ 6c:55:60:8c:ea:7d:34:bf:2a:6b:a8:56:b8:88:53:65:be:b7: >+ 0e:4a:b1:c1:4b:ba:40:fe:06:f8:94:c8:a2:32:ba:9f:b3:de: >+ da:e5:24:8c:88:dc:f9:02:84:b7:4a:1c:fc:13:bc:b6:c0:87: >+ dc:2e:8b:73 >+-----BEGIN CERTIFICATE----- >+MIIDnzCCAoegAwIBAgIDBR6dMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl >+Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODA2MDQyMDI5NDVaFw0xODA3MDQyMDI5NDVa >+MBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC >+AQoCggEBAKRlEDmUw9EE2IVTKzUn/hSU/AeQhtwzlCRRhfyvu2hzK2o/mg6IPtnI >+EdgPNzeaclNgumGCTznJibOTK8WWGxKTJ5kmcXBO1gW4LOJI734sYgjdPwGHgqDV >++bT2jYyBAXueKh4LHNk8es+NsJdhulskPvjrMqRJ2hlJPUlqG90MjMw3dM/qE/36 >+554B7Wn7rsh46QKQiA7POKEyto/R6BljvXWBeznaDaYXN6wW4LMp2XjwCUNhzYe0 >+eK/RVXABhHVtN35cSAuvPPBzxjZqor12CZE+eWVJIYpMsEJsI+WW6DmxdzcU0AIX >+DM01oz2Poc/84Qykcb50udmMer1VYGkCAwEAAaOB8DCB7TAJBgNVHRMEAjAAMB0G >+A1UdDgQWBBTbPamKE1/hKcBXQbGV7RST0iEmLDAfBgNVHSMEGDAWgBR5J+MmBnNC >+Uuc/aaBLOndmEnHq+jALBgNVHQ8EBAMCBeAwEwYDVR0lBAwwCgYIKwYBBQUHAwEw >+fgYDVR0RBHcwdYIJbG9jYWxob3N0gg13d3cubG9jYWxob3N0giF4bi0tbjhqNmRz >+NTNsd3drcnFodjI4YS5sb2NhbGhvc3SCFnhuLS1sdmUtNmxhZC5sb2NhbGhvc3SC >+Dnd3dzIubG9jYWxob3N0gg53d3cxLmxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOC >+AQEARi2DdrJ8ziGnc26GVgttC55lNT8288ibHzjB06tjaRnCLM9/rFzvopA/D26w >+jOjEolJaXjke3K3uTe9YRIjSZCGz8RsVrfBMdPyUC+oS+VbIce2zShT+30MRYiAg >+eEyVjlaTa097nDiil9kFOBhu/KMVXQGHgyKUKn6RwTxRJA7GIVhwMrA0aSVtAjWd >+5IHJbyHagsvKlhlWBNz7ibwco7lCdBOGynVgczMdWa1IcyiJMovN4V2VU7PvxvLO >+ho1XRfry4/9zbFVgjOp9NL8qa6hWuIhTZb63DkqxwUu6QP4G+JTIojK6n7Pe2uUk >+jIjc+QKEt0oc/BO8tsCH3C6Lcw== >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial >new file mode 100644 >index 0000000000000000000000000000000000000000..7c28d5b864e0668ea5165f95b07cee6277aa8911 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial >@@ -0,0 +1 @@ >+051E9E >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial.old >new file mode 100644 >index 0000000000000000000000000000000000000000..a61a1842eb834ac05e65df2172d3523283769cc7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/serial.old >@@ -0,0 +1 @@ >+051E9D >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/wptwk_process_log.out.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/wptwk_process_log.out.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cf9267f284bd2d4b91f153036fb5e08b12e6140b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/wptwk_process_log.out.txt >@@ -0,0 +1,161 @@ >+DEBUG:web-platform-tests:Going to use port 57385 >+DEBUG:web-platform-tests:Going to use port 57386 >+WARNING:web-platform-tests:bind_hostname in config is deprecated; use bind_address instead >+INFO:web-platform-tests:Generating new CA in /Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs >+DEBUG:web-platform-tests:Generating a 2048 bit RSA private key >+.................+++ >+................................................................................+++ >+writing new private key to '/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/cakey.pem' >+----- >+ >+DEBUG:web-platform-tests:Using configuration from /Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/openssl.cfg >+Check that the request matches the signature >+Signature ok >+Certificate Details: >+ Serial Number: 335516 (0x51e9c) >+ Validity >+ Not Before: Jun 4 20:29:43 2018 GMT >+ Not After : Jul 4 20:29:43 2018 GMT >+ Subject: >+ commonName = web-platform-tests >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:TRUE >+ X509v3 Subject Key Identifier: >+ 79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ DirName:/CN=web-platform-tests >+ serial:05:1E:9C >+ >+ X509v3 Key Usage: >+ Certificate Sign >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+Certificate is to be certified until Jul 4 20:29:43 2018 GMT (30 days) >+ >+Write out database with 1 new entries >+Data Base Updated >+ >+INFO:web-platform-tests:Generating new host cert >+DEBUG:web-platform-tests:Generating a 2048 bit RSA private key >+......................................................+++ >+................................................+++ >+writing new private key to '/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/localhost.key' >+----- >+ >+DEBUG:web-platform-tests:Using configuration from /Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/fetch/Release/layout-test-results/_wpt_certs/openssl.cfg >+Check that the request matches the signature >+Signature ok >+Certificate Details: >+ Serial Number: 335517 (0x51e9d) >+ Validity >+ Not Before: Jun 4 20:29:45 2018 GMT >+ Not After : Jul 4 20:29:45 2018 GMT >+ Subject: >+ commonName = localhost >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:FALSE >+ X509v3 Subject Key Identifier: >+ DB:3D:A9:8A:13:5F:E1:29:C0:57:41:B1:95:ED:14:93:D2:21:26:2C >+ X509v3 Authority Key Identifier: >+ keyid:79:27:E3:26:06:73:42:52:E7:3F:69:A0:4B:3A:77:66:12:71:EA:FA >+ >+ X509v3 Key Usage: >+ Digital Signature, Non Repudiation, Key Encipherment >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ X509v3 Subject Alternative Name: >+ DNS:localhost, DNS:www.localhost, DNS:xn--n8j6ds53lwwkrqhv28a.localhost, DNS:xn--lve-6lad.localhost, DNS:www2.localhost, DNS:www1.localhost >+Certificate is to be certified until Jul 4 20:29:45 2018 GMT (30 days) >+ >+Write out database with 1 new entries >+Data Base Updated >+ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (2, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (2, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Skip by failure: error(48, 'Address already in use') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Listen on: (30, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+INFO:web-platform-test-launcher:http, port:8800, pid:877 >+INFO:web-platform-test-launcher:http, port:8801, pid:878 >+INFO:web-platform-test-launcher:wss, port:57386, pid:876 >+INFO:web-platform-test-launcher:ws, port:49001, pid:875 >+INFO:web-platform-test-launcher:https, port:9443, pid:879 >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (30, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (2, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (2, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Skip by failure: error(48, 'Address already in use') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Listen on: (30, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+INFO:web-platform-tests:Starting http server on localhost:8800 >+INFO:web-platform-tests:Starting http server on localhost:8801 >+INFO:web-platform-tests:Starting http server on localhost:9443 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD6.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD6.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..fa92e3d903d7faf8b0b18f85f15543ceabd29056 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD6.pem >@@ -0,0 +1,83 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 27606 (0x6bd6) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:32:57 2018 GMT >+ Not After : Jul 4 20:32:57 2018 GMT >+ Subject: CN=web-platform-tests >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:bf:ac:9c:40:62:28:84:2f:a0:cf:1a:bc:a8:59: >+ 3f:d5:8a:58:48:29:67:9b:83:80:dc:73:f7:45:44: >+ 46:64:e0:c8:b3:0e:d9:fc:33:90:93:cd:e2:00:f5: >+ a8:8b:e0:8e:c7:4b:87:97:0e:38:00:69:9f:c0:81: >+ 5f:60:00:6a:9c:f0:9d:50:44:94:03:29:0c:1d:f6: >+ 4d:e1:2c:c0:fa:f9:d3:aa:90:2a:57:0d:62:3d:3f: >+ 5c:0e:8a:31:71:d2:d8:62:ec:58:02:2e:72:85:7b: >+ 8f:be:03:a4:c6:9b:3c:03:c4:76:42:f3:ed:52:4b: >+ 7e:71:20:05:a0:14:26:00:09:f7:b9:bf:7e:0e:1f: >+ b1:88:22:e4:72:6e:3f:f2:16:29:31:6f:5b:ac:3b: >+ b7:bb:73:9e:41:50:0f:0f:f9:86:76:c9:bc:75:b0: >+ 3a:b9:69:92:10:0c:40:4d:ba:ec:c2:b0:9d:d5:67: >+ 03:7c:ea:fc:f2:ac:dc:c0:57:20:09:9e:b3:99:21: >+ 87:7b:20:9a:ed:e2:b1:bc:59:db:59:c4:6e:41:e5: >+ 30:3e:5d:08:ac:94:ed:9c:13:99:68:79:19:ad:3e: >+ 29:ae:61:69:ef:78:de:d9:e8:80:83:de:00:b0:57: >+ fc:d6:df:8d:fb:af:b6:e4:40:5e:a6:3a:0a:93:c3: >+ 9b:33 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:TRUE >+ X509v3 Subject Key Identifier: >+ E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ X509v3 Authority Key Identifier: >+ keyid:E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ DirName:/CN=web-platform-tests >+ serial:6B:D6 >+ >+ X509v3 Key Usage: >+ Certificate Sign >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ Signature Algorithm: sha256WithRSAEncryption >+ 63:e7:11:69:29:13:b3:31:2c:cb:35:08:a9:26:6d:c0:69:a7: >+ e5:64:cd:73:d2:24:80:42:e8:95:c2:13:ca:c8:96:04:9b:37: >+ 81:b9:66:8a:45:bf:81:04:be:4d:7f:24:2c:ff:32:85:95:3e: >+ 7d:55:a3:cf:a7:04:25:e1:c2:fe:72:58:63:b6:1e:d8:20:9c: >+ 0d:1a:c3:8a:5f:66:39:d1:bd:ec:1d:8e:ba:44:72:2c:1e:d9: >+ af:96:32:3c:78:9f:7a:7b:44:81:05:dc:ec:7b:fd:97:12:e9: >+ d8:ec:6f:a0:16:06:ce:a6:0e:3a:13:22:b2:40:40:b2:de:a2: >+ bd:2b:1a:9c:3c:46:71:ec:d4:3d:64:e0:b3:e9:1f:dd:dd:33: >+ b7:59:cd:a4:b7:2c:83:a8:8b:ef:7e:a9:63:8c:b5:53:b0:2a: >+ b7:33:0e:e1:e0:5b:93:8f:cf:93:68:05:83:63:79:4b:b7:12: >+ de:ed:8d:1b:fb:89:b6:ae:0d:09:1b:6f:de:ff:5d:05:61:9c: >+ 6b:bc:43:a3:62:41:f8:b7:d0:07:7a:51:cf:15:c6:fd:21:46: >+ a6:4a:ea:26:7f:be:df:06:59:f7:44:71:d9:d1:ea:2d:99:d9: >+ d2:6d:69:a5:66:bd:b3:c8:c8:41:d1:bb:94:d2:f1:84:db:f5: >+ f6:53:22:0e >+-----BEGIN CERTIFICATE----- >+MIIDUTCCAjmgAwIBAgICa9YwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi >+LXBsYXRmb3JtLXRlc3RzMB4XDTE4MDYwNDIwMzI1N1oXDTE4MDcwNDIwMzI1N1ow >+HTEbMBkGA1UEAwwSd2ViLXBsYXRmb3JtLXRlc3RzMIIBIjANBgkqhkiG9w0BAQEF >+AAOCAQ8AMIIBCgKCAQEAv6ycQGIohC+gzxq8qFk/1YpYSClnm4OA3HP3RURGZODI >+sw7Z/DOQk83iAPWoi+COx0uHlw44AGmfwIFfYABqnPCdUESUAykMHfZN4SzA+vnT >+qpAqVw1iPT9cDooxcdLYYuxYAi5yhXuPvgOkxps8A8R2QvPtUkt+cSAFoBQmAAn3 >+ub9+Dh+xiCLkcm4/8hYpMW9brDu3u3OeQVAPD/mGdsm8dbA6uWmSEAxATbrswrCd >+1WcDfOr88qzcwFcgCZ6zmSGHeyCa7eKxvFnbWcRuQeUwPl0IrJTtnBOZaHkZrT4p >+rmFp73je2eiAg94AsFf81t+N+6+25EBepjoKk8ObMwIDAQABo4GaMIGXMAwGA1Ud >+EwQFMAMBAf8wHQYDVR0OBBYEFOn7i34LF6KVbSd+K/OSMd0Js42FMEYGA1UdIwQ/ >+MD2AFOn7i34LF6KVbSd+K/OSMd0Js42FoSGkHzAdMRswGQYDVQQDDBJ3ZWItcGxh >+dGZvcm0tdGVzdHOCAmvWMAsGA1UdDwQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcD >+ATANBgkqhkiG9w0BAQsFAAOCAQEAY+cRaSkTszEsyzUIqSZtwGmn5WTNc9IkgELo >+lcITysiWBJs3gblmikW/gQS+TX8kLP8yhZU+fVWjz6cEJeHC/nJYY7Ye2CCcDRrD >+il9mOdG97B2OukRyLB7Zr5YyPHifentEgQXc7Hv9lxLp2OxvoBYGzqYOOhMiskBA >+st6ivSsanDxGcezUPWTgs+kf3d0zt1nNpLcsg6iL736pY4y1U7AqtzMO4eBbk4/P >+k2gFg2N5S7cS3u2NG/uJtq4NCRtv3v9dBWGca7xDo2JB+LfQB3pRzxXG/SFGpkrq >+Jn++3wZZ90Rx2dHqLZnZ0m1ppWa9s8jIQdG7lNLxhNv19lMiDg== >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD7.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD7.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..fe10e95b5b6581b418e6c086960374a528b87a2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/6BD7.pem >@@ -0,0 +1,85 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 27607 (0x6bd7) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:32:58 2018 GMT >+ Not After : Jul 4 20:32:58 2018 GMT >+ Subject: CN=localhost >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:c8:43:e9:87:b9:f6:d2:03:60:5e:5a:0e:f2:ec: >+ 03:70:91:46:8e:f4:70:7d:24:d5:2a:5f:8a:89:00: >+ c9:03:cc:a0:3c:6d:46:87:1b:a7:da:d4:c2:fc:2a: >+ 19:43:5a:31:6f:f3:5e:52:27:cf:71:8d:fe:a3:e9: >+ e8:80:25:16:c6:9f:2d:f1:bb:9b:b2:09:b0:dd:73: >+ 00:00:2b:83:b6:db:9d:42:02:38:ff:b0:bb:5f:9b: >+ da:8b:c1:19:c7:a5:60:c4:56:0e:4b:70:8c:13:0a: >+ 5f:8b:7f:3e:c7:f0:d3:e5:68:09:ec:05:dd:0b:fa: >+ 89:85:76:24:35:81:b5:5a:2f:af:46:d1:57:47:2a: >+ 5a:c2:ea:79:ff:a3:70:71:b9:ea:2d:b2:26:48:e7: >+ bb:17:eb:47:c7:f6:01:69:19:e1:67:23:b0:4f:e2: >+ 76:0d:c3:78:03:63:ff:57:06:8d:63:18:72:de:13: >+ bf:b4:25:89:e5:b7:75:f4:b8:fb:ee:6f:8d:19:ce: >+ 09:65:0e:75:df:b7:77:71:8d:eb:7f:e8:7b:cd:7f: >+ a3:d5:99:bd:9e:d5:6c:0f:fa:4f:1f:43:79:b5:04: >+ bc:43:e9:04:23:69:e9:c8:d0:be:0e:12:38:0e:12: >+ fc:cd:8d:4c:5f:e2:da:b7:79:96:5e:46:cc:20:62: >+ 4a:73 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:FALSE >+ X509v3 Subject Key Identifier: >+ 69:A6:2D:2B:25:93:12:B4:CC:92:E2:DF:1A:F4:B9:9F:3A:44:93:94 >+ X509v3 Authority Key Identifier: >+ keyid:E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ >+ X509v3 Key Usage: >+ Digital Signature, Non Repudiation, Key Encipherment >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ X509v3 Subject Alternative Name: >+ DNS:localhost, DNS:www.localhost, DNS:xn--n8j6ds53lwwkrqhv28a.localhost, DNS:xn--lve-6lad.localhost, DNS:www2.localhost, DNS:www1.localhost >+ Signature Algorithm: sha256WithRSAEncryption >+ b6:93:d1:60:86:0a:45:51:d0:9a:0a:9c:c1:c9:32:50:9d:a1: >+ e4:7d:9f:f4:21:bb:93:f4:84:55:7f:89:52:d8:5f:13:93:17: >+ 62:1b:5c:fd:7a:9c:16:30:a6:4f:7e:97:0b:5d:96:7b:dd:cb: >+ 00:0b:04:6b:0c:f9:f3:fe:e5:2f:54:40:8f:a4:ed:0a:d5:ce: >+ d6:4a:8e:82:58:d0:7b:7c:84:e4:c2:6a:23:b8:1f:cd:ac:ce: >+ cc:ab:7b:59:7a:39:f7:7b:b8:2b:cf:7f:a2:43:e8:88:8a:14: >+ 1a:19:18:4a:34:ea:a1:a0:af:4c:3d:d8:0f:fc:35:7e:d3:1f: >+ 7a:02:7b:70:8f:83:00:ad:27:cf:b9:ec:bd:24:f6:71:b5:89: >+ 57:41:ef:28:92:09:c6:d1:9c:0e:71:5c:5f:2f:64:c7:c9:76: >+ 15:95:ca:15:6f:af:62:52:f3:38:08:44:d4:1d:05:c1:c1:c1: >+ b4:6c:d0:5e:4e:5e:b4:95:74:30:40:c6:9a:8c:1c:3f:7f:d6: >+ 9e:17:2d:13:79:59:fb:19:6a:a5:40:2a:42:ee:bc:7a:80:d8: >+ 3c:56:98:20:5e:65:c1:27:29:63:65:5a:c1:5e:cf:14:da:09: >+ ec:a7:c5:91:f3:49:7d:86:a2:32:65:b4:0f:ab:5d:8f:f3:21: >+ 24:59:c9:2b >+-----BEGIN CERTIFICATE----- >+MIIDnjCCAoagAwIBAgICa9cwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi >+LXBsYXRmb3JtLXRlc3RzMB4XDTE4MDYwNDIwMzI1OFoXDTE4MDcwNDIwMzI1OFow >+FDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB >+CgKCAQEAyEPph7n20gNgXloO8uwDcJFGjvRwfSTVKl+KiQDJA8ygPG1Ghxun2tTC >+/CoZQ1oxb/NeUifPcY3+o+nogCUWxp8t8bubsgmw3XMAACuDttudQgI4/7C7X5va >+i8EZx6VgxFYOS3CMEwpfi38+x/DT5WgJ7AXdC/qJhXYkNYG1Wi+vRtFXRypawup5 >+/6NwcbnqLbImSOe7F+tHx/YBaRnhZyOwT+J2DcN4A2P/VwaNYxhy3hO/tCWJ5bd1 >+9Lj77m+NGc4JZQ5137d3cY3rf+h7zX+j1Zm9ntVsD/pPH0N5tQS8Q+kEI2npyNC+ >+DhI4DhL8zY1MX+Lat3mWXkbMIGJKcwIDAQABo4HwMIHtMAkGA1UdEwQCMAAwHQYD >+VR0OBBYEFGmmLSslkxK0zJLi3xr0uZ86RJOUMB8GA1UdIwQYMBaAFOn7i34LF6KV >+bSd+K/OSMd0Js42FMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDATB+ >+BgNVHREEdzB1gglsb2NhbGhvc3SCDXd3dy5sb2NhbGhvc3SCIXhuLS1uOGo2ZHM1 >+M2x3d2tycWh2MjhhLmxvY2FsaG9zdIIWeG4tLWx2ZS02bGFkLmxvY2FsaG9zdIIO >+d3d3Mi5sb2NhbGhvc3SCDnd3dzEubG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IB >+AQC2k9FghgpFUdCaCpzByTJQnaHkfZ/0IbuT9IRVf4lS2F8TkxdiG1z9epwWMKZP >+fpcLXZZ73csACwRrDPnz/uUvVECPpO0K1c7WSo6CWNB7fITkwmojuB/NrM7Mq3tZ >+ejn3e7grz3+iQ+iIihQaGRhKNOqhoK9MPdgP/DV+0x96Antwj4MArSfPuey9JPZx >+tYlXQe8okgnG0ZwOcVxfL2THyXYVlcoVb69iUvM4CETUHQXBwcG0bNBeTl60lXQw >+QMaajBw/f9aeFy0TeVn7GWqlQCpC7rx6gNg8VpggXmXBJyljZVrBXs8U2gnsp8WR >+80l9hqIyZbQPq12P8yEkWckr >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cacert.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cacert.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..fa92e3d903d7faf8b0b18f85f15543ceabd29056 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cacert.pem >@@ -0,0 +1,83 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 27606 (0x6bd6) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:32:57 2018 GMT >+ Not After : Jul 4 20:32:57 2018 GMT >+ Subject: CN=web-platform-tests >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:bf:ac:9c:40:62:28:84:2f:a0:cf:1a:bc:a8:59: >+ 3f:d5:8a:58:48:29:67:9b:83:80:dc:73:f7:45:44: >+ 46:64:e0:c8:b3:0e:d9:fc:33:90:93:cd:e2:00:f5: >+ a8:8b:e0:8e:c7:4b:87:97:0e:38:00:69:9f:c0:81: >+ 5f:60:00:6a:9c:f0:9d:50:44:94:03:29:0c:1d:f6: >+ 4d:e1:2c:c0:fa:f9:d3:aa:90:2a:57:0d:62:3d:3f: >+ 5c:0e:8a:31:71:d2:d8:62:ec:58:02:2e:72:85:7b: >+ 8f:be:03:a4:c6:9b:3c:03:c4:76:42:f3:ed:52:4b: >+ 7e:71:20:05:a0:14:26:00:09:f7:b9:bf:7e:0e:1f: >+ b1:88:22:e4:72:6e:3f:f2:16:29:31:6f:5b:ac:3b: >+ b7:bb:73:9e:41:50:0f:0f:f9:86:76:c9:bc:75:b0: >+ 3a:b9:69:92:10:0c:40:4d:ba:ec:c2:b0:9d:d5:67: >+ 03:7c:ea:fc:f2:ac:dc:c0:57:20:09:9e:b3:99:21: >+ 87:7b:20:9a:ed:e2:b1:bc:59:db:59:c4:6e:41:e5: >+ 30:3e:5d:08:ac:94:ed:9c:13:99:68:79:19:ad:3e: >+ 29:ae:61:69:ef:78:de:d9:e8:80:83:de:00:b0:57: >+ fc:d6:df:8d:fb:af:b6:e4:40:5e:a6:3a:0a:93:c3: >+ 9b:33 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:TRUE >+ X509v3 Subject Key Identifier: >+ E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ X509v3 Authority Key Identifier: >+ keyid:E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ DirName:/CN=web-platform-tests >+ serial:6B:D6 >+ >+ X509v3 Key Usage: >+ Certificate Sign >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ Signature Algorithm: sha256WithRSAEncryption >+ 63:e7:11:69:29:13:b3:31:2c:cb:35:08:a9:26:6d:c0:69:a7: >+ e5:64:cd:73:d2:24:80:42:e8:95:c2:13:ca:c8:96:04:9b:37: >+ 81:b9:66:8a:45:bf:81:04:be:4d:7f:24:2c:ff:32:85:95:3e: >+ 7d:55:a3:cf:a7:04:25:e1:c2:fe:72:58:63:b6:1e:d8:20:9c: >+ 0d:1a:c3:8a:5f:66:39:d1:bd:ec:1d:8e:ba:44:72:2c:1e:d9: >+ af:96:32:3c:78:9f:7a:7b:44:81:05:dc:ec:7b:fd:97:12:e9: >+ d8:ec:6f:a0:16:06:ce:a6:0e:3a:13:22:b2:40:40:b2:de:a2: >+ bd:2b:1a:9c:3c:46:71:ec:d4:3d:64:e0:b3:e9:1f:dd:dd:33: >+ b7:59:cd:a4:b7:2c:83:a8:8b:ef:7e:a9:63:8c:b5:53:b0:2a: >+ b7:33:0e:e1:e0:5b:93:8f:cf:93:68:05:83:63:79:4b:b7:12: >+ de:ed:8d:1b:fb:89:b6:ae:0d:09:1b:6f:de:ff:5d:05:61:9c: >+ 6b:bc:43:a3:62:41:f8:b7:d0:07:7a:51:cf:15:c6:fd:21:46: >+ a6:4a:ea:26:7f:be:df:06:59:f7:44:71:d9:d1:ea:2d:99:d9: >+ d2:6d:69:a5:66:bd:b3:c8:c8:41:d1:bb:94:d2:f1:84:db:f5: >+ f6:53:22:0e >+-----BEGIN CERTIFICATE----- >+MIIDUTCCAjmgAwIBAgICa9YwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi >+LXBsYXRmb3JtLXRlc3RzMB4XDTE4MDYwNDIwMzI1N1oXDTE4MDcwNDIwMzI1N1ow >+HTEbMBkGA1UEAwwSd2ViLXBsYXRmb3JtLXRlc3RzMIIBIjANBgkqhkiG9w0BAQEF >+AAOCAQ8AMIIBCgKCAQEAv6ycQGIohC+gzxq8qFk/1YpYSClnm4OA3HP3RURGZODI >+sw7Z/DOQk83iAPWoi+COx0uHlw44AGmfwIFfYABqnPCdUESUAykMHfZN4SzA+vnT >+qpAqVw1iPT9cDooxcdLYYuxYAi5yhXuPvgOkxps8A8R2QvPtUkt+cSAFoBQmAAn3 >+ub9+Dh+xiCLkcm4/8hYpMW9brDu3u3OeQVAPD/mGdsm8dbA6uWmSEAxATbrswrCd >+1WcDfOr88qzcwFcgCZ6zmSGHeyCa7eKxvFnbWcRuQeUwPl0IrJTtnBOZaHkZrT4p >+rmFp73je2eiAg94AsFf81t+N+6+25EBepjoKk8ObMwIDAQABo4GaMIGXMAwGA1Ud >+EwQFMAMBAf8wHQYDVR0OBBYEFOn7i34LF6KVbSd+K/OSMd0Js42FMEYGA1UdIwQ/ >+MD2AFOn7i34LF6KVbSd+K/OSMd0Js42FoSGkHzAdMRswGQYDVQQDDBJ3ZWItcGxh >+dGZvcm0tdGVzdHOCAmvWMAsGA1UdDwQEAwICBDATBgNVHSUEDDAKBggrBgEFBQcD >+ATANBgkqhkiG9w0BAQsFAAOCAQEAY+cRaSkTszEsyzUIqSZtwGmn5WTNc9IkgELo >+lcITysiWBJs3gblmikW/gQS+TX8kLP8yhZU+fVWjz6cEJeHC/nJYY7Ye2CCcDRrD >+il9mOdG97B2OukRyLB7Zr5YyPHifentEgQXc7Hv9lxLp2OxvoBYGzqYOOhMiskBA >+st6ivSsanDxGcezUPWTgs+kf3d0zt1nNpLcsg6iL736pY4y1U7AqtzMO4eBbk4/P >+k2gFg2N5S7cS3u2NG/uJtq4NCRtv3v9dBWGca7xDo2JB+LfQB3pRzxXG/SFGpkrq >+Jn++3wZZ90Rx2dHqLZnZ0m1ppWa9s8jIQdG7lNLxhNv19lMiDg== >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cakey.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cakey.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..5555e25c08ac0e911106ba05aa63f8c80554d0c5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/cakey.pem >@@ -0,0 +1,30 @@ >+-----BEGIN ENCRYPTED PRIVATE KEY----- >+MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIcfdOgzjjQlQCAggA >+MB0GCWCGSAFlAwQBKgQQA5xK4pXGL4m9z5KrP9vyQASCBNCLcXjmODPPDNDwltBn >+TLVFK5zbVCfgqFYqYzsqXGjtUeo3dl2og4xVLj5fazxKFjTGeRYRSdr+DHCFlY6u >+QhGZDrEYZdOE+WDfI2xapl/ivDzeDpGvfhnPiJLFomPBUkZC3ki8HIU0vewYPD3W >+FEsIkzCn+ZwjysjIiulQsrGX/1E11AgfaTcqECGk/NJ5pB48ZBdkhcyIuoz0Ssq2 >+s99hYjXeUymbmRbr/1h+QKZa+RAREga+VlI++vSuHRP5zVg/kvcXVoCxjP/2b0M8 >+PyzEPgV8ftqvQ09XJYsC38El9bJVZQMY+kxFsGKye8y6kaVloJJ2hbfOZ4DS1FMS >+1QMcV1jmq/5SlvgiJLtsx9dcr19p3LDFVOuS62HO1YsfPOmeLXFkRWZB2x9+ZzIv >+/pxx5auGSRbpDp8km60Wb44v4YEAPXBZLtHHgK/sdMwXYfgncVbHw8KCbOZvC9RI >+M8FXlxTTo6I/ZLeDPTr4lQYxUwlvKbTchGNtK/ZYGWW6UmGLMCX+pyHjx9a654gP >+zQxWahSvcjKTifsWtPsHJ5xdmqihhU48Qn/wUCNTbVsX/s6tVEzrtw3i30sriS76 >+vCDfkU2d3cTDc5plYJztOjiK+OFQZUWRoj0yZ1kbZUPxlN0HX/ZBOyUL5zL1Wqn3 >+yB8kN6ykqcJqAdFZF4mPk86zo0pr077WsIst6jZSVDHn+GSJz6Td6mENeTN/GsaH >+CAbaXAACKWA9XsCIx541rY5j/YlgTfT/X52scSDZhdkzqkk+A+zAqx48BW6vXug9 >+9CURz5NeQrEl2CuxGd8A9X3gbzF7/mKzaa/INpFb0wCVtto7YNv0N/nBidCkCj7w >+0/hsNtk9ZU/RVbuhXDSqQJ2DCBdAs2zwQAMtZGi4D7z27cpIlg8fzVVvY8ukGy0r >+USuSCa881xPuojH/HB9BbRfvPyODkzqpDa6cDiDArWEX341w6PGgCKSnTCreGRpY >+GhagJvToarITR0BgJEwiYmg7Noa0Jm7b2BAg/WZICIQ6YU5oPdrpnsDy82QR+3yC >+lApkQJjq93LU8YWfrQbQftt576foCynnxgi+WoG0js82N7AuZU7NunNvoNeGQm5K >+Km42wxUABK+08urti1VX36W1BJ/8fuuH7ToKu6D5GWL0eogMKX9yLX4C2+KQhcvl >+PUtk1oawVdsn4NEC4PeNbPRNb2iFURfKzo5k4918RB85J48/xQ/9wHo8k9AyFaIz >+UM46GjnoDmZu+TMxJcsmJHD2x5SuhcC2H1ZAn+LnijosbEU9b/Jpp2aPLs5FEpR2 >+GNZ4zaCYEe5PxeGO79YI4x/UenQeGbQLR2lLLck8hNGbNKaQtAp8FNIwhe0dprYo >+g+dU0HtherZo4LQlJCVPOB7cNc3yMAQy9ZJuyzFIbGpea8qzxIkqjH7K5HR577i7 >+VReWcRbg1cN2PF4cfUg/ABYzSFJELBD+16J3aEwNSs/bkj0xYGuQxgdYoVFHGGrY >+aMx4KZChbkzdc2TzCN/yeQaBSBVvVUOnrh/wALwTDINHEKCi1XeY9GRHjGqEGxDj >+OT2RMUM9WzscczRMIPXnNPcz96BqGr2xPC3IuLemZzzqV/eGUNzLopX1awGXLrR2 >+BpV8juD/chQkHN/qIDVfXx0/tQ== >+-----END ENCRYPTED PRIVATE KEY----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr >new file mode 100644 >index 0000000000000000000000000000000000000000..8f7e63a3475ce82ed03dba035f5c01a42ca38c65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr >@@ -0,0 +1 @@ >+unique_subject = yes >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr.old >new file mode 100644 >index 0000000000000000000000000000000000000000..8f7e63a3475ce82ed03dba035f5c01a42ca38c65 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.attr.old >@@ -0,0 +1 @@ >+unique_subject = yes >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.old >new file mode 100644 >index 0000000000000000000000000000000000000000..140a8588a88b9f6a2d96583356164169d43f6f2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/index.txt.old >@@ -0,0 +1 @@ >+V 180704203257Z 6BD6 unknown /CN=web-platform-tests >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.key b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.key >new file mode 100644 >index 0000000000000000000000000000000000000000..d9a25a351b979f1fe9326ec4194cb9502ddfcb5c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.key >@@ -0,0 +1,28 @@ >+-----BEGIN PRIVATE KEY----- >+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIQ+mHufbSA2Be >+Wg7y7ANwkUaO9HB9JNUqX4qJAMkDzKA8bUaHG6fa1ML8KhlDWjFv815SJ89xjf6j >+6eiAJRbGny3xu5uyCbDdcwAAK4O2251CAjj/sLtfm9qLwRnHpWDEVg5LcIwTCl+L >+fz7H8NPlaAnsBd0L+omFdiQ1gbVaL69G0VdHKlrC6nn/o3BxueotsiZI57sX60fH >+9gFpGeFnI7BP4nYNw3gDY/9XBo1jGHLeE7+0JYnlt3X0uPvub40ZzgllDnXft3dx >+jet/6HvNf6PVmb2e1WwP+k8fQ3m1BLxD6QQjaenI0L4OEjgOEvzNjUxf4tq3eZZe >+RswgYkpzAgMBAAECggEAXaWUMIm/Z1l42OYYE3RV72+fpP2dFIgCvjvLFmGtnf8z >+9s3Kqyc9iNDxFOXCxoIImCcfth8znBAgQRoCRNoTGnIZE+780XZCpGtAVtQCVaHA >+mbtcWASWuhCxU6TKn1cwNt9e89v/RHAXWa3495ogHChYa2waf516bVRffj3XRgIu >+hnpGgnTHku4R7DUL7PQMTEZzJAkCB80BuAIpgL1c5NYYjP2luWtNyNEBYOVyA2DD >+bXhkGju8kwgN04o8zQv0W42Jg+aZsDdoCb5/pEkm0Gg+LIYi84VYptS1GXVxk6wm >+GxAbf1c31Z/CHHwOElniCK8uPPYDV8ctuXR0Na6wUQKBgQDoz1Dw+TJpWZlgp0Yf >+A9EjF7q4mE+d0hGbRqFmM8hfrxbVM93GFOhYYNyUbRo2xnzKLeTmgOOcudRx1TwQ >+zFQ+dkMgni8nPVztp+eQPc7GfFe7c9i5Ieu9WM39NDzrFJNRwTMnFd5xe4UVCdh0 >+4wCjLbyVu8GgganF6Wk/IodglQKBgQDcNrSZuOpX5N4MT7xURP6JTQr/RRE44fN0 >+5WfoJxw7P14wtOKIUVPBDllJyOdJBavboCmfbCmguxwhPx0VtVrmDsS5FVO1KF4L >+aDGlqgtQfpcA/Bb+5NxZUzROdVZsmiWV0kzjqCC8glwvgU8TZDWul0SVujKRDfHZ >+tPOfldSU5wKBgEN4OZvsjFiNt+6T67V3VLfX26w9r+0sASBAAuxsm2hnhLV7F42d >+Z4ydXa/CQrOXKHkrfcfzmINGM7RduM+hd9S2T1P3o/C6TuEtJOXfk7pgNMjFlQxq >+MTipsODtr63tQ5iQ5jMwmkvHIVVsiget9fRUf+/g/wd2LG6H65F5f0RVAoGBAMqz >+XFgneyY+mBnTB3K2M2nkzdudErY+Xd/bDmMGJRlwQd4pkl+SJLsO3ydo02RG4SN/ >+cPC7GjJGKSV9N+N0lOAw9em79NpK9w4e8ZwhQtrsO0j/wpcLyLw8N2iE33GGDlSz >+SG1BpCiBAiQELeqWkkdMHCiKRON6Z4VS5/GcdBo/AoGAaG5teIeeUFAzXjGA6UfA >+zD+NVxEMfdmDyzmZSahZWfR/vQhDUe8La8Rrm1x2qOGBM/V8mPkgLvKJwmhHcT6s >+X+HH+mAUZBBXgs682Bnxyeygs9RCbIU1lb0bkSfgXHgTF3lUhOybk43YrLJERgUU >+dilgx8/JTewvr6fklQ70YoQ= >+-----END PRIVATE KEY----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.pem b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.pem >new file mode 100644 >index 0000000000000000000000000000000000000000..fe10e95b5b6581b418e6c086960374a528b87a2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/localhost.pem >@@ -0,0 +1,85 @@ >+Certificate: >+ Data: >+ Version: 3 (0x2) >+ Serial Number: 27607 (0x6bd7) >+ Signature Algorithm: sha256WithRSAEncryption >+ Issuer: CN=web-platform-tests >+ Validity >+ Not Before: Jun 4 20:32:58 2018 GMT >+ Not After : Jul 4 20:32:58 2018 GMT >+ Subject: CN=localhost >+ Subject Public Key Info: >+ Public Key Algorithm: rsaEncryption >+ Public-Key: (2048 bit) >+ Modulus: >+ 00:c8:43:e9:87:b9:f6:d2:03:60:5e:5a:0e:f2:ec: >+ 03:70:91:46:8e:f4:70:7d:24:d5:2a:5f:8a:89:00: >+ c9:03:cc:a0:3c:6d:46:87:1b:a7:da:d4:c2:fc:2a: >+ 19:43:5a:31:6f:f3:5e:52:27:cf:71:8d:fe:a3:e9: >+ e8:80:25:16:c6:9f:2d:f1:bb:9b:b2:09:b0:dd:73: >+ 00:00:2b:83:b6:db:9d:42:02:38:ff:b0:bb:5f:9b: >+ da:8b:c1:19:c7:a5:60:c4:56:0e:4b:70:8c:13:0a: >+ 5f:8b:7f:3e:c7:f0:d3:e5:68:09:ec:05:dd:0b:fa: >+ 89:85:76:24:35:81:b5:5a:2f:af:46:d1:57:47:2a: >+ 5a:c2:ea:79:ff:a3:70:71:b9:ea:2d:b2:26:48:e7: >+ bb:17:eb:47:c7:f6:01:69:19:e1:67:23:b0:4f:e2: >+ 76:0d:c3:78:03:63:ff:57:06:8d:63:18:72:de:13: >+ bf:b4:25:89:e5:b7:75:f4:b8:fb:ee:6f:8d:19:ce: >+ 09:65:0e:75:df:b7:77:71:8d:eb:7f:e8:7b:cd:7f: >+ a3:d5:99:bd:9e:d5:6c:0f:fa:4f:1f:43:79:b5:04: >+ bc:43:e9:04:23:69:e9:c8:d0:be:0e:12:38:0e:12: >+ fc:cd:8d:4c:5f:e2:da:b7:79:96:5e:46:cc:20:62: >+ 4a:73 >+ Exponent: 65537 (0x10001) >+ X509v3 extensions: >+ X509v3 Basic Constraints: >+ CA:FALSE >+ X509v3 Subject Key Identifier: >+ 69:A6:2D:2B:25:93:12:B4:CC:92:E2:DF:1A:F4:B9:9F:3A:44:93:94 >+ X509v3 Authority Key Identifier: >+ keyid:E9:FB:8B:7E:0B:17:A2:95:6D:27:7E:2B:F3:92:31:DD:09:B3:8D:85 >+ >+ X509v3 Key Usage: >+ Digital Signature, Non Repudiation, Key Encipherment >+ X509v3 Extended Key Usage: >+ TLS Web Server Authentication >+ X509v3 Subject Alternative Name: >+ DNS:localhost, DNS:www.localhost, DNS:xn--n8j6ds53lwwkrqhv28a.localhost, DNS:xn--lve-6lad.localhost, DNS:www2.localhost, DNS:www1.localhost >+ Signature Algorithm: sha256WithRSAEncryption >+ b6:93:d1:60:86:0a:45:51:d0:9a:0a:9c:c1:c9:32:50:9d:a1: >+ e4:7d:9f:f4:21:bb:93:f4:84:55:7f:89:52:d8:5f:13:93:17: >+ 62:1b:5c:fd:7a:9c:16:30:a6:4f:7e:97:0b:5d:96:7b:dd:cb: >+ 00:0b:04:6b:0c:f9:f3:fe:e5:2f:54:40:8f:a4:ed:0a:d5:ce: >+ d6:4a:8e:82:58:d0:7b:7c:84:e4:c2:6a:23:b8:1f:cd:ac:ce: >+ cc:ab:7b:59:7a:39:f7:7b:b8:2b:cf:7f:a2:43:e8:88:8a:14: >+ 1a:19:18:4a:34:ea:a1:a0:af:4c:3d:d8:0f:fc:35:7e:d3:1f: >+ 7a:02:7b:70:8f:83:00:ad:27:cf:b9:ec:bd:24:f6:71:b5:89: >+ 57:41:ef:28:92:09:c6:d1:9c:0e:71:5c:5f:2f:64:c7:c9:76: >+ 15:95:ca:15:6f:af:62:52:f3:38:08:44:d4:1d:05:c1:c1:c1: >+ b4:6c:d0:5e:4e:5e:b4:95:74:30:40:c6:9a:8c:1c:3f:7f:d6: >+ 9e:17:2d:13:79:59:fb:19:6a:a5:40:2a:42:ee:bc:7a:80:d8: >+ 3c:56:98:20:5e:65:c1:27:29:63:65:5a:c1:5e:cf:14:da:09: >+ ec:a7:c5:91:f3:49:7d:86:a2:32:65:b4:0f:ab:5d:8f:f3:21: >+ 24:59:c9:2b >+-----BEGIN CERTIFICATE----- >+MIIDnjCCAoagAwIBAgICa9cwDQYJKoZIhvcNAQELBQAwHTEbMBkGA1UEAwwSd2Vi >+LXBsYXRmb3JtLXRlc3RzMB4XDTE4MDYwNDIwMzI1OFoXDTE4MDcwNDIwMzI1OFow >+FDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB >+CgKCAQEAyEPph7n20gNgXloO8uwDcJFGjvRwfSTVKl+KiQDJA8ygPG1Ghxun2tTC >+/CoZQ1oxb/NeUifPcY3+o+nogCUWxp8t8bubsgmw3XMAACuDttudQgI4/7C7X5va >+i8EZx6VgxFYOS3CMEwpfi38+x/DT5WgJ7AXdC/qJhXYkNYG1Wi+vRtFXRypawup5 >+/6NwcbnqLbImSOe7F+tHx/YBaRnhZyOwT+J2DcN4A2P/VwaNYxhy3hO/tCWJ5bd1 >+9Lj77m+NGc4JZQ5137d3cY3rf+h7zX+j1Zm9ntVsD/pPH0N5tQS8Q+kEI2npyNC+ >+DhI4DhL8zY1MX+Lat3mWXkbMIGJKcwIDAQABo4HwMIHtMAkGA1UdEwQCMAAwHQYD >+VR0OBBYEFGmmLSslkxK0zJLi3xr0uZ86RJOUMB8GA1UdIwQYMBaAFOn7i34LF6KV >+bSd+K/OSMd0Js42FMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDATB+ >+BgNVHREEdzB1gglsb2NhbGhvc3SCDXd3dy5sb2NhbGhvc3SCIXhuLS1uOGo2ZHM1 >+M2x3d2tycWh2MjhhLmxvY2FsaG9zdIIWeG4tLWx2ZS02bGFkLmxvY2FsaG9zdIIO >+d3d3Mi5sb2NhbGhvc3SCDnd3dzEubG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IB >+AQC2k9FghgpFUdCaCpzByTJQnaHkfZ/0IbuT9IRVf4lS2F8TkxdiG1z9epwWMKZP >+fpcLXZZ73csACwRrDPnz/uUvVECPpO0K1c7WSo6CWNB7fITkwmojuB/NrM7Mq3tZ >+ejn3e7grz3+iQ+iIihQaGRhKNOqhoK9MPdgP/DV+0x96Antwj4MArSfPuey9JPZx >+tYlXQe8okgnG0ZwOcVxfL2THyXYVlcoVb69iUvM4CETUHQXBwcG0bNBeTl60lXQw >+QMaajBw/f9aeFy0TeVn7GWqlQCpC7rx6gNg8VpggXmXBJyljZVrBXs8U2gnsp8WR >+80l9hqIyZbQPq12P8yEkWckr >+-----END CERTIFICATE----- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial >new file mode 100644 >index 0000000000000000000000000000000000000000..08f763c8f6273e0e903b4304574ae936f8b94d26 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial >@@ -0,0 +1 @@ >+0a2572 >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial.old b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial.old >new file mode 100644 >index 0000000000000000000000000000000000000000..d83032ad425333b77c1790de5c8ea0d87aa7cdd3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/_wpt_certs/serial.old >@@ -0,0 +1 @@ >+6BD7 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/wptwk_process_log.out.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/wptwk_process_log.out.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7c1e540e95884af0a17cb39cf2957b63565c23d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/Release/layout-test-results/wptwk_process_log.out.txt >@@ -0,0 +1,92 @@ >+DEBUG:web-platform-tests:Going to use port 57862 >+DEBUG:web-platform-tests:Going to use port 57863 >+WARNING:web-platform-tests:bind_hostname in config is deprecated; use bind_address instead >+DEBUG:web-platform-tests:notAfter=Jul 4 20:32:58 2018 GMT >+ >+INFO:web-platform-tests:Using existing host cert >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (2, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (2, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Skip by failure: error(48, 'Address already in use') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Listen on: (30, 1, '', '', '') >+INFO:web-platform-test-launcher:http, port:8800, pid:3449 >+INFO:web-platform-test-launcher:http, port:8801, pid:3450 >+INFO:web-platform-test-launcher:wss, port:57863, pid:3448 >+INFO:web-platform-test-launcher:ws, port:49001, pid:3447 >+INFO:web-platform-test-launcher:https, port:9443, pid:3451 >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (30, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Create socket on: (2, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (30, 1, '', '', '') >+INFO:mod_pywebsocket.standalone.WebSocketServer:Bind on: (2, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.py)$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Skip by failure: error(48, 'Address already in use') >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+INFO:mod_pywebsocket.standalone.WebSocketServer:Listen on: (30, 1, '', '', '') >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharnessreport\.js$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/resources/testharness\.css$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.py)$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.asis)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.worker\.js)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.any\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.window\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/WebKit/(.*\.worker\.html)$ >+DEBUG:web-platform-tests:Route pattern: ^/serve\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/(?P<spec>[^/]+)/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/(.*)$ >+DEBUG:web-platform-tests:Route pattern: ^/\_certs/(.*)$ >+INFO:web-platform-tests:Starting http server on localhost:8801 >+INFO:web-platform-tests:Starting http server on localhost:8800 >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/update\_manifest\.py$ >+DEBUG:web-platform-tests:Route pattern: ^/tools/runner/(.*)$ >+INFO:web-platform-tests:Starting http server on localhost:9443 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/mode-same-origin.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/mode-same-origin.any.worker-expected.txt >index a6b3bf4f87df5e21a89f5607b3ba880d494ff8ca..ae047aa0ee161fb3c9b32323328259fc08772b7a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/mode-same-origin.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/mode-same-origin.any.worker-expected.txt >@@ -1,6 +1,6 @@ >-CONSOLE MESSAGE: Unsafe attempt to load URL https://localhost:9443/fetch/api/resources/top.txt?location=https%3A%2F%2Flocalhost%3A9443%2Ffetch%2Fapi%2Fresources%2Ftop.txt&count=1 from origin http://localhost:8800. Domains, protocols and ports must match. >+CONSOLE MESSAGE: Unsafe attempt to load URL https://localhost:9443/fetch/api/resources/top.txt?location=https%3A%2F%2Flocalhost%3A9443%2Ffetch%2Fapi%2Fresources%2Ftop.txt&count=1 from frame with URL http://localhost:8800/fetch/api/basic/mode-same-origin.any.worker.html. Domains, protocols and ports must match. > >-CONSOLE MESSAGE: Unsafe attempt to load URL http://127.0.0.1:8800/fetch/api/resources/top.txt?location=http%3A%2F%2F127.0.0.1%3A8800%2Ffetch%2Fapi%2Fresources%2Ftop.txt&count=1 from origin http://localhost:8800. Domains, protocols and ports must match. >+CONSOLE MESSAGE: Unsafe attempt to load URL http://127.0.0.1:8800/fetch/api/resources/top.txt?location=http%3A%2F%2F127.0.0.1%3A8800%2Ffetch%2Fapi%2Fresources%2Ftop.txt&count=1 from frame with URL http://localhost:8800/fetch/api/basic/mode-same-origin.any.worker.html. Domains, protocols and ports must match. > > > PASS Fetch ../resources/top.txt with same-origin mode >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt >index 9944d1bd5afb4cfab04eb7e9c20bf4af31b1f24c..6304a83beba553674372bf2ae8b414b14eab9849 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt >@@ -1,6 +1,6 @@ > > FAIL Fetching about:blank (GET) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." >-FAIL Fetching about:blank (PUT) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." >+FAIL Fetching about:blank (PUT) is OK promise_test: Unhandled rejection with value: object "TypeError: Preflight response is not successful" > FAIL Fetching about:blank (POST) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." > PASS Fetching about:invalid.com is KO > PASS Fetching about:config is KO >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any.worker-expected.txt >index 9944d1bd5afb4cfab04eb7e9c20bf4af31b1f24c..6304a83beba553674372bf2ae8b414b14eab9849 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any.worker-expected.txt >@@ -1,6 +1,6 @@ > > FAIL Fetching about:blank (GET) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." >-FAIL Fetching about:blank (PUT) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." >+FAIL Fetching about:blank (PUT) is OK promise_test: Unhandled rejection with value: object "TypeError: Preflight response is not successful" > FAIL Fetching about:blank (POST) is OK promise_test: Unhandled rejection with value: object "TypeError: Cross origin requests are only supported for HTTP." > PASS Fetching about:invalid.com is KO > PASS Fetching about:config is KO >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-blob-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-blob-expected.txt >index d91402f4f630f69f5645bf872faf1bc375536d18..c9f880cc20703dd4b53fc841ca531e4e7be212cf 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-blob-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-blob-expected.txt >@@ -1,5 +1,4 @@ >-CONSOLE MESSAGE: line 27: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 27: Fetch API cannot load blob:http://www.localhost:8800/ due to access control checks. >+CONSOLE MESSAGE: line 27: Fetch API cannot load blob:http://www.localhost:8800/. Cross origin requests are only supported for HTTP. > > PASS Fetching [GET] URL.createObjectURL(blob) is OK > PASS Fetching [GET] blob:http://www.localhost:8800/ is KO >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-others-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-others-expected.txt >index 38aebb9345ca456f516328584f86908f7926673e..ed68ec61c351c905070e4610980266c8c8e076ee 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-others-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/basic/scheme-others-expected.txt >@@ -1,35 +1,19 @@ >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load aaa://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load cap://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load cid://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load dav://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load dict://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load dns://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load geo://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load im://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load imap://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load ipp://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load ldap://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load mailto://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load nfs://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load pop://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load rtsp://localhost:8800/ due to access control checks. >-CONSOLE MESSAGE: line 10: Cross origin requests are only supported for HTTP. >-CONSOLE MESSAGE: line 10: Fetch API cannot load snmp://localhost:8800/ due to access control checks. >+CONSOLE MESSAGE: line 10: Fetch API cannot load aaa://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load cap://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load cid://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load dav://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load dict://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load dns://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load geo://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load im://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load imap://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load ipp://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load ldap://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load mailto://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load nfs://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load pop://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load rtsp://localhost:8800/. Cross origin requests are only supported for HTTP. >+CONSOLE MESSAGE: line 10: Fetch API cannot load snmp://localhost:8800/. Cross origin requests are only supported for HTTP. > > PASS Fetching aaa://localhost:8800/ is KO > PASS Fetching cap://localhost:8800/ is KO >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt >index c849905cd27616179a23ee18e38d4a42d7112d14..8ac4928f0860cfc6063654a7cd8a29e2c9643242 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt >@@ -1,13 +1,13 @@ > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/top.txt due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/top.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/fetch/api/resources/top.txt due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/fetch/api/resources/top.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/top.txt due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/top.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8801/fetch/api/resources/top.txt due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8801/fetch/api/resources/top.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Fetch API cannot load https://127.0.0.1:9443/fetch/api/resources/top.txt due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load https://127.0.0.1:9443/fetch/api/resources/top.txt. Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > > PASS Same domain different port [no-cors mode] > PASS Same domain different port [server forbid CORS] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-multiple-origins-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-multiple-origins-expected.txt >index ec8fe3b7d96fb7145e796e93f309fc00b762b0f7..8da7aa6959545e34e6472537f8993151048789b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-multiple-origins-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-multiple-origins-expected.txt >@@ -1,15 +1,15 @@ > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Fexample.com%2C%20http%3A%2F%2Flocalhost%3A8800 due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Fexample.com%2C%20http%3A%2F%2Flocalhost%3A8800. Access-Control-Allow-Origin cannot contain more than one origin. > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Fexample.com%2C%20* due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Fexample.com%2C%20*. Access-Control-Allow-Origin cannot contain more than one origin. > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Flocalhost%3A8800%2C%20http%3A%2F%2Flocalhost%3A8800 due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%22%22%2C%20http%3A%2F%2Flocalhost%3A8800%2C%20http%3A%2F%2Flocalhost%3A8800. Access-Control-Allow-Origin cannot contain more than one origin. > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=*%2C%20http%3A%2F%2Fexample.com%2C%20* due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=*%2C%20http%3A%2F%2Fexample.com%2C%20*. Access-Control-Allow-Origin cannot contain more than one origin. > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=*%2C%20http%3A%2F%2Fexample.com%2C%20http%3A%2F%2Flocalhost%3A8800 due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=*%2C%20http%3A%2F%2Fexample.com%2C%20http%3A%2F%2Flocalhost%3A8800. Access-Control-Allow-Origin cannot contain more than one origin. > CONSOLE MESSAGE: Access-Control-Allow-Origin cannot contain more than one origin. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%2C%20http%3A%2F%2Fexample.com%2C%20https%3A%2F%2Fexample2.com due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8801/fetch/api/resources/preflight.py?origin=%2C%20http%3A%2F%2Fexample.com%2C%20https%3A%2F%2Fexample2.com. Access-Control-Allow-Origin cannot contain more than one origin. > > FAIL 3 origins allowed, match the 3rd (http://localhost:8800) promise_test: Unhandled rejection with value: object "TypeError: Access-Control-Allow-Origin cannot contain more than one origin." > FAIL 3 origins allowed, match the 3rd ("*") promise_test: Unhandled rejection with value: object "TypeError: Access-Control-Allow-Origin cannot contain more than one origin." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt >index e7704fb4b6d29b0c4d4c9cad3374d1a215552554..3bceadb4015c6a46952b9fed144c0623e575f25f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt >@@ -6,7 +6,6 @@ CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-A > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Origin http://localhost:8800 is not allowed by Access-Control-Allow-Origin. > > PASS Cross domain different subdomain [origin OK] > PASS Cross domain different subdomain [origin KO] >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any-expected.txt >index 5fd22b933dfe59afcbae26e6cc162cade1364314..5aeac6c52b1c761207680d73250232d39f4a3405 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any-expected.txt >@@ -1,17 +1,10 @@ >-CONSOLE MESSAGE: Method SUPER is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?allow_methods=*&allow_headers=x-test& due to access control checks. >-CONSOLE MESSAGE: Method OK is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?allow_methods=*&allow_headers=*& due to access control checks. >-CONSOLE MESSAGE: Method OK is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=*& due to access control checks. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=& due to access control checks. >-CONSOLE MESSAGE: Request header field X-Test is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=get&allow_headers=*& due to access control checks. >-CONSOLE MESSAGE: Request header field X-Test is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=*& due to access control checks. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=put&allow_headers=*& due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?allow_methods=*&allow_headers=x-test&. Method SUPER is not allowed by Access-Control-Allow-Methods. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?allow_methods=*&allow_headers=*&. Method OK is not allowed by Access-Control-Allow-Methods. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=*&. Method OK is not allowed by Access-Control-Allow-Methods. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=&. Method PUT is not allowed by Access-Control-Allow-Methods. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=get&allow_headers=*&. Request header field X-Test is not allowed by Access-Control-Allow-Headers. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=*&allow_headers=*&. Request header field X-Test is not allowed by Access-Control-Allow-Headers. >+CONSOLE MESSAGE: Fetch API cannot load http://127.0.0.1:8800/fetch/api/resources/preflight.py?origin=http://localhost:8800&credentials&allow_methods=put&allow_headers=*&. Method PUT is not allowed by Access-Control-Allow-Methods. > > PASS CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test) > FAIL CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test) promise_test: Unhandled rejection with value: object "TypeError: Method SUPER is not allowed by Access-Control-Allow-Methods." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker-expected.txt >index 3afb4fb0d77e74db949680834389874fb2b51acd..47a3cb4395a5ca3cefdbeb3514b9f68f5b2d7317 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-star.any.worker-expected.txt >@@ -1,10 +1,3 @@ >-CONSOLE MESSAGE: Method SUPER is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method OK is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method OK is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Request header field X-Test is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field X-Test is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. > > PASS CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test) > FAIL CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test) promise_test: Unhandled rejection with value: object "TypeError: Method SUPER is not allowed by Access-Control-Allow-Methods." >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status.any.worker-expected.txt >index 88a63f7dc6963994002cee4d63c2a51d618d80a1..400c5c643027e7b2f9029474867bc7b6195cdb10 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status.any.worker-expected.txt >@@ -1,23 +1,3 @@ >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful >-CONSOLE MESSAGE: Preflight response is not successful > > PASS Preflight answered with status 200 > PASS Preflight answered with status 201 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt >index d6511741518083b1f5dd7fa619ed10e0c42c446e..a27e27b5cf10800fd368cd0287c3cc9f4e8e28a1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight.any.worker-expected.txt >@@ -1,10 +1,3 @@ >-CONSOLE MESSAGE: Method DELETE is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method PATCH is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Method NEW is not allowed by Access-Control-Allow-Methods. >-CONSOLE MESSAGE: Request header field x-test-header1 is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field Content-Type is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Method PUT is not allowed by Access-Control-Allow-Methods. > > PASS CORS [DELETE], server allows > PASS CORS [DELETE], server refuses >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-preflight.any.worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-preflight.any.worker-expected.txt >index 95d9f93ff6469f725977a91073126140bf9caff0..f63a241026286d7b5a6e22f5e64eb500662cb6af 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-preflight.any.worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-preflight.any.worker-expected.txt >@@ -1,18 +1,3 @@ >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. >-CONSOLE MESSAGE: Request header field x-w3c is not allowed by Access-Control-Allow-Headers. > > PASS Redirect 301: same origin to cors (preflight after redirection success case) > PASS Redirect 301: same origin to cors (preflight after redirection failure case) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-expected.txt >index 4050659c95d462af7536ab9888f831c4594f6282..c294d4ddcf65c9afa5f50910ac48b499a44c2da0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/referrer-origin-expected.txt >@@ -1,4 +1,4 @@ > >-PASS Request's referrer is origin >+FAIL Request's referrer is origin assert_equals: request's referrer is http://localhost:8800/ expected "http://localhost:8800/" but got "http://localhost:8800/fetch/api/policies/referrer-origin.html" > FAIL Cross-origin referrer is overridden by client origin promise_test: Unhandled rejection with value: object "TypeError: Referrer is not same-origin." > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-expected.txt >index d003d4a2b7f7e560639ac5263a619060c3b478dc..5f13861a6f5962d57449f711b2fef7fb7be75bda 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-expected.txt >@@ -1,12 +1,12 @@ > > FAIL Redirect 301 20 times assert_equals: Response's status is 200 expected 200 but got 301 >-FAIL Redirect 301 21 times assert_unreached: Should have rejected: undefined Reached unreachable code >+PASS Redirect 301 21 times > FAIL Redirect 302 20 times assert_equals: Response's status is 200 expected 200 but got 302 > FAIL Redirect 302 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > FAIL Redirect 303 20 times assert_equals: Response's status is 200 expected 200 but got 303 > FAIL Redirect 303 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > FAIL Redirect 307 20 times promise_test: Unhandled rejection with value: object "TypeError: too many HTTP redirects" >-FAIL Redirect 307 21 times assert_unreached: Should have rejected: undefined Reached unreachable code >+PASS Redirect 307 21 times > FAIL Redirect 308 20 times assert_equals: Response's status is 200 expected 200 but got 308 > FAIL Redirect 308 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker-expected.txt >index cadf78d0c348ee98f4dc772530fdd9d9510bf75a..29ad3f35571205a0eb9e762c051292d3392648f7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-count-worker-expected.txt >@@ -1,12 +1,12 @@ > > FAIL Redirect 301 20 times assert_equals: Response's status is 200 expected 200 but got 301 >-FAIL Redirect 301 21 times assert_unreached: Should have rejected: undefined Reached unreachable code >-FAIL Redirect 302 20 times assert_equals: Response's status is 200 expected 200 but got 302 >+PASS Redirect 301 21 times >+FAIL Redirect 302 20 times promise_test: Unhandled rejection with value: object "TypeError: too many HTTP redirects" > FAIL Redirect 302 21 times assert_unreached: Should have rejected: undefined Reached unreachable code >-FAIL Redirect 303 20 times assert_equals: Response's status is 200 expected 200 but got 303 >+FAIL Redirect 303 20 times promise_test: Unhandled rejection with value: object "TypeError: too many HTTP redirects" > FAIL Redirect 303 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > FAIL Redirect 307 20 times assert_equals: Response's status is 200 expected 200 but got 307 >-PASS Redirect 307 21 times >+FAIL Redirect 307 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > FAIL Redirect 308 20 times assert_equals: Response's status is 200 expected 200 but got 308 > FAIL Redirect 308 21 times assert_unreached: Should have rejected: undefined Reached unreachable code > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-expected.txt >index 731ee23362f8026d2036263b5f030bf348901a9d..801c022366d0e83901c2569f037ca5aa2839c705 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location-expected.txt >@@ -1,23 +1,23 @@ > CONSOLE MESSAGE: Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=301&location=invalidurl%3A due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=301&location=invalidurl%3A. Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=301&location=data%3A%2Cdata%2520url due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=301&location=data%3A%2Cdata%2520url. Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=302&location=invalidurl%3A due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=302&location=invalidurl%3A. Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=302&location=data%3A%2Cdata%2520url due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=302&location=data%3A%2Cdata%2520url. Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=303&location=invalidurl%3A due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=303&location=invalidurl%3A. Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=303&location=data%3A%2Cdata%2520url due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=303&location=data%3A%2Cdata%2520url. Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=307&location=invalidurl%3A due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=307&location=invalidurl%3A. Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=307&location=data%3A%2Cdata%2520url due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=307&location=data%3A%2Cdata%2520url. Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=308&location=invalidurl%3A due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=308&location=invalidurl%3A. Cross-origin redirection to invalidurl: denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=308&location=data%3A%2Cdata%2520url due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?redirect_status=308&location=data%3A%2Cdata%2520url. Cross-origin redirection to data:,data%20url denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > > PASS Redirect 301 in "follow" mode without location > FAIL Redirect 301 in "manual" mode without location assert_equals: Response's status is 0 expected 0 but got 301 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-schemes-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-schemes-expected.txt >index 1777cd63b928d58a78283455d463baf1d88b6e5f..ecd75342b0eafcc73dd535aa4661b38dc33d9c89 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-schemes-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-schemes-expected.txt >@@ -1,13 +1,13 @@ > CONSOLE MESSAGE: Cross-origin redirection to mailto:a@a.com denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=mailto:a@a.com due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=mailto:a@a.com. Cross-origin redirection to mailto:a@a.com denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to data:,HI denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=data:,HI due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=data:,HI. Cross-origin redirection to data:,HI denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to facetime:a@a.org denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=facetime:a@a.org due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=facetime:a@a.org. Cross-origin redirection to facetime:a@a.org denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to about:blank denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=about:blank due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=about:blank. Cross-origin redirection to about:blank denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Cross-origin redirection to about:unicorn denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=about:unicorn due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load http://localhost:8800/fetch/api/resources/redirect.py?location=about:unicorn. Cross-origin redirection to about:unicorn denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > CONSOLE MESSAGE: Not allowed to load local resource: blob:djfksfjs > > PASS Fetch: handling different schemes in redirects >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker-expected.txt >index b16c54d9d509ae9d40cea6610b492e48cff284f1..a21bd78f1c7467492d94c8c78e020bebd1dbd6b5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker-expected.txt >@@ -1,5 +1,5 @@ > CONSOLE MESSAGE: Cross-origin redirection to data:text/plain;base64,cmVzcG9uc2UncyBib2R5 denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. >-CONSOLE MESSAGE: Unsafe attempt to load URL data:text/plain;base64,cmVzcG9uc2UncyBib2R5 from origin http://localhost:8800. Domains, protocols and ports must match. >+CONSOLE MESSAGE: Unsafe attempt to load URL data:text/plain;base64,cmVzcG9uc2UncyBib2R5 from frame with URL http://localhost:8800/fetch/api/redirect/redirect-to-dataurl-worker.html. Domains, protocols and ports must match. > > CONSOLE MESSAGE: Cross-origin redirection to data:text/plain;base64,cmVzcG9uc2UncyBib2R5 denied by Cross-Origin Resource Sharing policy: URL is either a non-HTTP URL or contains credentials. > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-keepalive-quota-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-keepalive-quota-expected.txt >index 283ff48d069c508992c350cad60424ac44c0a233..622a6a2653b26d087ed3d095835f6effcba29150 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-keepalive-quota-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-keepalive-quota-expected.txt >@@ -1,9 +1,6 @@ >-CONSOLE MESSAGE: line 33: Reached maximum amount of queued data of 64Kb for keepalive requests >-CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0 due to access control checks. >-CONSOLE MESSAGE: line 33: Reached maximum amount of queued data of 64Kb for keepalive requests >-CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0 due to access control checks. >-CONSOLE MESSAGE: line 33: Reached maximum amount of queued data of 64Kb for keepalive requests >-CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0 due to access control checks. >+CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0. Reached maximum amount of queued data of 64Kb for keepalive requests >+CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0. Reached maximum amount of queued data of 64Kb for keepalive requests >+CONSOLE MESSAGE: line 33: Fetch API cannot load http://localhost:8800/fetch/api/resources/trickle.py?count=1&ms=0. Reached maximum amount of queued data of 64Kb for keepalive requests > > PASS A Keep-Alive fetch() with a small body should succeed. > PASS A Keep-Alive fetch() with a body at the Quota Limit should succeed. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-expected.txt >index a230eb73da1adab946fe18531817ccc4972be27e..a552f606e80e48b34b6a71646da2037cf9942e0c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/001-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS Cross-origin navigation started from unload handler > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-expected.txt >index ee2a5f9c58cac99cecc35cde90116984c28e1e79..f5446f76c78e9505123d1b5e69807cabc8dcdcc8 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/003-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS Navigation from unload whilst traversing history > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-expected.txt >index 4de40e09c8c4d8e88d88ea583cb3b1db9fe69fb5..a90bb1ef38dfc5ea26cd43adb12d02c4f276124e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_data_url-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS Same-origin navigation started from unload handler > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-expected.txt >index 4de40e09c8c4d8e88d88ea583cb3b1db9fe69fb5..a90bb1ef38dfc5ea26cd43adb12d02c4f276124e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/navigating-across-documents/navigation_unload_same_origin-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS Same-origin navigation started from unload handler > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/001-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/001-expected.txt >index 2dc2bd29fd6294fd933b888ebb5699514308a586..1973de710b063b8a1f31e5347e83f877d1190f51 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/001-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/001-expected.txt >@@ -1,5 +1,5 @@ > main frame - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > CONSOLE MESSAGE: line 21: TypeError: do_test is not a function. (In 'do_test()', 'do_test' is undefined) > > FAIL document.open in unload assert_equals: expected "0123456789" but got "012389" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/002-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/002-expected.txt >index 52d12fb8cf99c7ab07ce5c1103d914cc7330469c..ab70476b5b4d31ee01922422fe09de73d2e396cf 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/002-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/002-expected.txt >@@ -1,5 +1,5 @@ > main frame - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > FAIL document.open in unload assert_equals: expected "0123456789Z" but got "016789Z" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/003-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/003-expected.txt >index 42eaf968ebb41269527c1baa05705b4c19576b69..8e92195e5f58f99badcf600ea1955b9419441e75 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/003-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/003-expected.txt >@@ -1,5 +1,5 @@ > main frame - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS document.open in beforeunload with link > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/004-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/004-expected.txt >index 8f3097438502e364ca879747482e7439d963ac7f..6d407822c51154e60e72fde53308f8aa2a123599 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/004-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/004-expected.txt >@@ -1,5 +1,5 @@ > main frame - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > Harness Error (TIMEOUT), message = null > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/005-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/005-expected.txt >index 95f858c23e924d25524b8d2a43c62c3358c53ba7..2ffe9156950f3037cc45a74ab8d939c0ca2a94b0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/005-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/005-expected.txt >@@ -1,5 +1,5 @@ > main frame - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS document.open in pagehide in iframe > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-expected.txt >index 33f279800b302aa269f601f16eb1485d0b5b3545..5d0ba266c38443e17f65e095d019636d25eddaa6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/003-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS unload event properties > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-expected.txt >index deaeb808cc2977f514905cb10c7ee09bbf50c294..1c46d62e22ee5021d0a76fd6b849ee0dfc7eb0fd 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/004-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS pagehide / unload event order > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-expected.txt >index 7406d5052c3ddc2d09a48b8ccd7b1a48a17164a4..37712c5fb1e84b79c67a9180b51dc38cade48332 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/007-expected.txt >@@ -1,5 +1,5 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS salvagable state of document after setting unload listener > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-expected.txt >index 40bfef4e2238d54653301ff406c9207e92c78738..5229b82c94ebd9871eb33013b7bad19ca8f848fa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/browsing-the-web/unloading-documents/unload/009-expected.txt >@@ -1,4 +1,4 @@ >-frame "<!--frame1-->" - has 1 onunload handler(s) >+frame "<!--framePath //<!--frame0-->-->" - has 1 onunload handler(s) > > PASS unload IDL attribute > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt >index e0f26a46f4272d3a3a40a1d5091597480dd084d3..6cf29e80e173b1c0d9ec26531a2d84c28c4f9dae 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt >@@ -2,13 +2,13 @@ > PASS features "screeny=/404" should NOT set "height=404" > PASS features "screeny=_404" should NOT set "height=404" > PASS features "screeny=L404" should NOT set "height=404" >-PASS features "screeny=405.5" should set "height=405" >-PASS features "screeny=405.32" should set "height=405" >-PASS features "screeny=405LLl" should set "height=405" >-PASS features "screeny=405^4" should set "height=405" >-PASS features "screeny=405*3" should set "height=405" >-PASS features "screeny=405/5" should set "height=405" >-PASS features "screeny=405 " should set "height=405" >-PASS features "screeny=405e1" should set "height=405" >-PASS features "screeny=405e-1" should set "height=405" >+FAIL features "screeny=405.5" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405.5 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405.32" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405.32 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405LLl" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405LLl value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405^4" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405^4 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405*3" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405*3 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405/5" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405/5 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405 " should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405e1" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405e1 value after first non-digit will be ignored" expected 405 but got 399 >+FAIL features "screeny=405e-1" should set "height=405" assert_equals: "height=401,width=402,left=0,screeny=405e-1 value after first non-digit will be ignored" expected 405 but got 399 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt >index a78113dc6ddea750a100a6f097e6ad7a72a73f88..613ae4e0e0174d0e7862701b2078a896da5b2849 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_menuitem-element-expected.txt >@@ -22,7 +22,6 @@ PASS html5lib_menuitem-element.html 03664aa93a55daceccc26d99c0aef841d8862af5 > PASS html5lib_menuitem-element.html 6d596b9e342db2306365fbdfb7615377c5b26347 > PASS html5lib_menuitem-element.html 4b712b488be9ee047c139c1b0cd955bae990b8e5 > afcd3b1e3317ac609ddab924d836ba1e3873b80f >- > Input > > <!DOCTYPE html><body><menuitem>A<menuitem>B >@@ -49,7 +48,6 @@ Actual > | <menuitem> > | "B" > 95c0c6923fe609297c1592f2cb82bb9f2d0f5aed >- > Input > > <!DOCTYPE html><body><menuitem>A<menu>B</menu> >@@ -76,7 +74,6 @@ Actual > | <menu> > | "B" > e2772fe779cbcefb4458f169a0cd495cf7115845 >- > Input > > <!DOCTYPE html><body><menuitem>A<hr>B >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt >index 874d90ab4dfbe69f6e8ad7a872249ec6d39a0f27..1a30c21826222a187dc0ff66d0e6432019bae40f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests11-expected.txt >@@ -18,7 +18,6 @@ PASS html5lib_tests11.html 791437ece7ba684e00162d1dd79dfe540e3621a7 > PASS html5lib_tests11.html af40d26164229c29b9be77ed6dd7dda780cba55c > PASS html5lib_tests11.html 16e68d18f8f0fb81013fe77a30b7d396c5081e5e > 0e5897aafe87e460f84576c2d1d983504d12a7db >- > Input > > <!DOCTYPE html><body><svg attributename='' attributetype='' basefrequency='' baseprofile='' calcmode='' clippathunits='' diffuseconstant='' edgemode='' filterunits='' filterres='' glyphref='' gradienttransform='' gradientunits='' kernelmatrix='' kernelunitlength='' keypoints='' keysplines='' keytimes='' lengthadjust='' limitingconeangle='' markerheight='' markerunits='' markerwidth='' maskcontentunits='' maskunits='' numoctaves='' pathlength='' patterncontentunits='' patterntransform='' patternunits='' pointsatx='' pointsaty='' pointsatz='' preservealpha='' preserveaspectratio='' primitiveunits='' refx='' refy='' repeatcount='' repeatdur='' requiredextensions='' requiredfeatures='' specularconstant='' specularexponent='' spreadmethod='' startoffset='' stddeviation='' stitchtiles='' surfacescale='' systemlanguage='' tablevalues='' targetx='' targety='' textlength='' viewbox='' viewtarget='' xchannelselector='' ychannelselector='' zoomandpan=''></svg> >@@ -157,7 +156,6 @@ Actual > | yChannelSelector="" > | zoomAndPan="" > a8f7a23601363454b4a13f66aed99ec9708ae87b >- > Input > > <!DOCTYPE html><body><svg contentScriptType='' contentStyleType='' externalResourcesRequired='' filterRes=''></svg> >@@ -186,7 +184,6 @@ Actual > | externalResourcesRequired="" > | filterRes="" > f8f7f6c576acc9eb874acb0dce6988f0f7b6fc5f >- > Input > > <!DOCTYPE html><body><svg CONTENTSCRIPTTYPE='' CONTENTSTYLETYPE='' EXTERNALRESOURCESREQUIRED='' FILTERRES=''></svg> >@@ -215,7 +212,6 @@ Actual > | externalResourcesRequired="" > | filterRes="" > fb4dc9f70129a8a045fca3a1e3acee052d0990b3 >- > Input > > <!DOCTYPE html><body><svg contentscripttype='' contentstyletype='' externalresourcesrequired='' filterres=''></svg> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests21-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests21-expected.txt >index 5c36cae5c7b8160edba3f7e5ad913ba6d8e62f9d..0ee0a56964f3e4915472a09edc32347bf560ecd0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests21-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests21-expected.txt >@@ -25,7 +25,6 @@ PASS html5lib_tests21.html 9df59cd349097dca330fefef6c1b1bbbfddadae6 > PASS html5lib_tests21.html 671f606f5cb7033854d99b96b040994f0f451496 > PASS html5lib_tests21.html caa80af33c7880aaddd17824efff1774ece01325 > 80607dd011814b8d3ef5c9ca380fec044dd5e1aa >- > Input > > <!DOCTYPE html><svg><![CDATA[foo]]]> >@@ -48,7 +47,6 @@ Actual > | <svg svg> > | "foo]]]>" > c9f579bf49de2d4c553d03e43772c0d94be474c0 >- > Input > > <!DOCTYPE html><svg><![CDATA[foo]]]]]> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt >index 771d690f1675f2a7b692af1b8b11f458b26e7301..79754d89bf0cc2285431b32a32a4ecd919116844 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_tests25-expected.txt >@@ -22,7 +22,6 @@ PASS html5lib_tests25.html 057bc2d868d2f365cb2c0b4d07c231d2fa2b23b7 > PASS html5lib_tests25.html 7f684d19be362ec9aa4fe7ecbba4ff3fc9730a43 > PASS html5lib_tests25.html d79f9119d02447226cc2d151044e6cffc5409e81 > de4aa726e09215ba9c50b97d257e6c6b880107f1 >- > Input > > <!DOCTYPE html><body><command>A >diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt >index d0bae9bdb4e5e223111270798d54348a734053e5..035940c048071fdc56b7411a8559a4a97e94a8c3 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/html/syntax/parsing/html5lib_webkit02-expected.txt >@@ -19,7 +19,6 @@ PASS html5lib_webkit02.html b6d2377b0dd710ca812c97b2b65cb5d2e93b0e5b > PASS html5lib_webkit02.html 21a5b2b413c4db8ed588334b9a50dea9872bbcfa > PASS html5lib_webkit02.html 90d3f6f2dff994f63293ca46f7cd50a75cde96a6 > 6e33515b4dc011dd390d433a6358bf68b786b1fd >- > Input > > <b><em><foo><foo><foo><aside></b></em> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt >index fad86b846d9441cc85a45d3f749fdae2aa8db22a..4ccfc3db938a4246c0ca8e9dd071e9e4d83be5a9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/cross_origin-expected.txt >@@ -1,5 +1,4 @@ >+CONSOLE MESSAGE: line 25: TypeError: undefined is not an object (evaluating 'performance.getEntriesByName(url)[0].serverTiming.length') > >-PASS Expected entry count for http://localhost:8800/server-timing/resources/blue.png: 1 >-PASS Expected entry count for http://127.0.0.1:8800/server-timing/resources/blue.png: 0 >-PASS Expected entry count for http://127.0.0.1:8800/server-timing/resources/blue_tao.png: 1 >+FAIL Untitled TypeError: undefined is not an object (evaluating 'performance.getEntriesByName(url)[0].serverTiming.length') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt >index c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240..c12594dec010a21eba759ec0b4b5d424fcd9d595 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl-expected.txt >@@ -1,3 +1,4 @@ >+CONSOLE MESSAGE: line 2659: Error: assert_not_equals: An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute. got disallowed value "undefined" > >-PASS Untitled >+FAIL Untitled Error: assert_not_equals: An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute. got disallowed value "undefined" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt >index c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240..c12594dec010a21eba759ec0b4b5d424fcd9d595 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/resource_timing_idl.https-expected.txt >@@ -1,3 +1,4 @@ >+CONSOLE MESSAGE: line 2659: Error: assert_not_equals: An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute. got disallowed value "undefined" > >-PASS Untitled >+FAIL Untitled Error: assert_not_equals: An instance of `PerformanceResourceTiming` should have a `serverTiming` attribute. got disallowed value "undefined" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt >index 153717dd85b42c7895bfdb8329c887d4b5defc03..9bf3e1e8fbe4ba67c053cf579c07d730083aab5f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing-expected.txt >@@ -1,326 +1,4 @@ >+CONSOLE MESSAGE: line 25: TypeError: undefined is not an object (evaluating 'serverTiming.length') > >-PASS 0.js - count (0 ?== 0) >-PASS 1.js - count (1 ?== 1) >-PASS 1.js - name (metric ?== metric) >-PASS 1.js - duration (0 ?== 0) >-PASS 1.js - description ( ?== ) >-PASS 2.js - count (1 ?== 1) >-PASS 2.js - name (metric ?== metric) >-PASS 2.js - duration (123.4 ?== 123.4) >-PASS 2.js - description ( ?== ) >-PASS 3.js - count (1 ?== 1) >-PASS 3.js - name (metric ?== metric) >-PASS 3.js - duration (123.4 ?== 123.4) >-PASS 3.js - description ( ?== ) >-PASS 4.js - count (1 ?== 1) >-PASS 4.js - name (metric ?== metric) >-PASS 4.js - duration (0 ?== 0) >-PASS 4.js - description (description ?== description) >-PASS 5.js - count (1 ?== 1) >-PASS 5.js - name (metric ?== metric) >-PASS 5.js - duration (0 ?== 0) >-PASS 5.js - description (description ?== description) >-PASS 6.js - count (1 ?== 1) >-PASS 6.js - name (metric ?== metric) >-PASS 6.js - duration (123.4 ?== 123.4) >-PASS 6.js - description (description ?== description) >-PASS 7.js - count (1 ?== 1) >-PASS 7.js - name (metric ?== metric) >-PASS 7.js - duration (123.4 ?== 123.4) >-PASS 7.js - description (description ?== description) >-PASS 8.js - count (1 ?== 1) >-PASS 8.js - name (aB3!#$%&'*+-.^_`|~ ?== aB3!#$%&'*+-.^_`|~) >-PASS 8.js - duration (0 ?== 0) >-PASS 8.js - description ( ?== ) >-PASS 9.js - count (1 ?== 1) >-PASS 9.js - name (metric ?== metric) >-PASS 9.js - duration (123.4 ?== 123.4) >-PASS 9.js - description (descr;,=iption ?== descr;,=iption) >-PASS 10.js - count (1 ?== 1) >-PASS 10.js - name (metric ?== metric) >-PASS 10.js - duration (0 ?== 0) >-PASS 10.js - description ( ?== ) >-PASS 11.js - count (1 ?== 1) >-PASS 11.js - name (metric ?== metric) >-PASS 11.js - duration (0 ?== 0) >-PASS 11.js - description ( ?== ) >-PASS 12.js - count (1 ?== 1) >-PASS 12.js - name (metric ?== metric) >-PASS 12.js - duration (123.4 ?== 123.4) >-PASS 12.js - description (description ?== description) >-PASS 13.js - count (1 ?== 1) >-PASS 13.js - name (metric ?== metric) >-PASS 13.js - duration (123.4 ?== 123.4) >-PASS 13.js - description (description ?== description) >-PASS 14.js - count (1 ?== 1) >-PASS 14.js - name (metric ?== metric) >-PASS 14.js - duration (0 ?== 0) >-PASS 14.js - description (description ?== description) >-PASS 15.js - count (3 ?== 3) >-PASS 15.js - [0].name (metric1 ?== metric1) >-PASS 15.js - [0].duration (12.3 ?== 12.3) >-PASS 15.js - [0].description (description1 ?== description1) >-PASS 15.js - [1].name (metric2 ?== metric2) >-PASS 15.js - [1].duration (45.6 ?== 45.6) >-PASS 15.js - [1].description (description2 ?== description2) >-PASS 15.js - [2].name (metric3 ?== metric3) >-PASS 15.js - [2].duration (78.9 ?== 78.9) >-PASS 15.js - [2].description (description3 ?== description3) >-PASS 16.js - count (5 ?== 5) >-PASS 16.js - [0].name (metric1 ?== metric1) >-PASS 16.js - [0].duration (0 ?== 0) >-PASS 16.js - [0].description ( ?== ) >-PASS 16.js - [1].name (metric2 ?== metric2) >-PASS 16.js - [1].duration (0 ?== 0) >-PASS 16.js - [1].description ( ?== ) >-PASS 16.js - [2].name (metric3 ?== metric3) >-PASS 16.js - [2].duration (0 ?== 0) >-PASS 16.js - [2].description ( ?== ) >-PASS 16.js - [3].name (metric4 ?== metric4) >-PASS 16.js - [3].duration (0 ?== 0) >-PASS 16.js - [3].description ( ?== ) >-PASS 16.js - [4].name (metric5 ?== metric5) >-PASS 16.js - [4].duration (0 ?== 0) >-PASS 16.js - [4].description ( ?== ) >-PASS 17.js - count (1 ?== 1) >-PASS 17.js - name (metric ?== metric) >-PASS 17.js - duration (0 ?== 0) >-PASS 17.js - description (description ?== description) >-PASS 18.js - count (1 ?== 1) >-PASS 18.js - name (metric ?== metric) >-PASS 18.js - duration (0 ?== 0) >-PASS 18.js - description ( description ?== description ) >-PASS 19.js - count (1 ?== 1) >-PASS 19.js - name (metric ?== metric) >-PASS 19.js - duration (0 ?== 0) >-PASS 19.js - description (descr"iption ?== descr"iption) >-PASS 20.js - count (1 ?== 1) >-PASS 20.js - name (metric ?== metric) >-PASS 20.js - duration (0 ?== 0) >-PASS 20.js - description ( ?== ) >-PASS 21.js - count (1 ?== 1) >-PASS 21.js - name (metric ?== metric) >-PASS 21.js - duration (0 ?== 0) >-PASS 21.js - description ( ?== ) >-PASS 22.js - count (1 ?== 1) >-PASS 22.js - name (metric ?== metric) >-PASS 22.js - duration (0 ?== 0) >-PASS 22.js - description ( ?== ) >-PASS 23.js - count (1 ?== 1) >-PASS 23.js - name (metric ?== metric) >-PASS 23.js - duration (0 ?== 0) >-PASS 23.js - description ( ?== ) >-PASS 24.js - count (1 ?== 1) >-PASS 24.js - name (metric ?== metric) >-PASS 24.js - duration (0 ?== 0) >-PASS 24.js - description ( ?== ) >-PASS 25.js - count (1 ?== 1) >-PASS 25.js - name (metric ?== metric) >-PASS 25.js - duration (0 ?== 0) >-PASS 25.js - description ( ?== ) >-PASS 26.js - count (1 ?== 1) >-PASS 26.js - name (metric ?== metric) >-PASS 26.js - duration (0 ?== 0) >-PASS 26.js - description ( ?== ) >-PASS 27.js - count (1 ?== 1) >-PASS 27.js - name (metric ?== metric) >-PASS 27.js - duration (0 ?== 0) >-PASS 27.js - description ( ?== ) >-PASS 28.js - count (1 ?== 1) >-PASS 28.js - name (metric ?== metric) >-PASS 28.js - duration (0 ?== 0) >-PASS 28.js - description ( ?== ) >-PASS 29.js - count (1 ?== 1) >-PASS 29.js - name (metric ?== metric) >-PASS 29.js - duration (0 ?== 0) >-PASS 29.js - description ( ?== ) >-PASS 30.js - count (1 ?== 1) >-PASS 30.js - name (metric ?== metric) >-PASS 30.js - duration (0 ?== 0) >-PASS 30.js - description ( ?== ) >-PASS 31.js - count (1 ?== 1) >-PASS 31.js - name (metric ?== metric) >-PASS 31.js - duration (0 ?== 0) >-PASS 31.js - description ( ?== ) >-PASS 32.js - count (1 ?== 1) >-PASS 32.js - name (metric ?== metric) >-PASS 32.js - duration (0 ?== 0) >-PASS 32.js - description ( ?== ) >-PASS 33.js - count (1 ?== 1) >-PASS 33.js - name (metric ?== metric) >-PASS 33.js - duration (0 ?== 0) >-PASS 33.js - description ( ?== ) >-PASS 34.js - count (1 ?== 1) >-PASS 34.js - name (metric ?== metric) >-PASS 34.js - duration (0 ?== 0) >-PASS 34.js - description ( ?== ) >-PASS 35.js - count (1 ?== 1) >-PASS 35.js - name (metric ?== metric) >-PASS 35.js - duration (0 ?== 0) >-PASS 35.js - description ( ?== ) >-PASS 36.js - count (1 ?== 1) >-PASS 36.js - name (metric ?== metric) >-PASS 36.js - duration (0 ?== 0) >-PASS 36.js - description ( ?== ) >-PASS 37.js - count (1 ?== 1) >-PASS 37.js - name (metric ?== metric) >-PASS 37.js - duration (0 ?== 0) >-PASS 37.js - description ( ?== ) >-PASS 38.js - count (1 ?== 1) >-PASS 38.js - name (metric ?== metric) >-PASS 38.js - duration (0 ?== 0) >-PASS 38.js - description ( ?== ) >-PASS 39.js - count (1 ?== 1) >-PASS 39.js - name (metric ?== metric) >-PASS 39.js - duration (0 ?== 0) >-PASS 39.js - description ( ?== ) >-PASS 40.js - count (1 ?== 1) >-PASS 40.js - name (metric ?== metric) >-PASS 40.js - duration (0 ?== 0) >-PASS 40.js - description ( ?== ) >-PASS 41.js - count (1 ?== 1) >-PASS 41.js - name (metric ?== metric) >-PASS 41.js - duration (0 ?== 0) >-PASS 41.js - description ( ?== ) >-PASS 42.js - count (1 ?== 1) >-PASS 42.js - name (metric ?== metric) >-PASS 42.js - duration (0 ?== 0) >-PASS 42.js - description ( ?== ) >-PASS 43.js - count (1 ?== 1) >-PASS 43.js - name (metric ?== metric) >-PASS 43.js - duration (0 ?== 0) >-PASS 43.js - description (\ ?== \) >-PASS 44.js - count (1 ?== 1) >-PASS 44.js - name (metric ?== metric) >-PASS 44.js - duration (0 ?== 0) >-PASS 44.js - description ( ?== ) >-PASS 45.js - count (1 ?== 1) >-PASS 45.js - name (metric ?== metric) >-PASS 45.js - duration (0 ?== 0) >-PASS 45.js - description (" ?== ") >-PASS 46.js - count (1 ?== 1) >-PASS 46.js - name (metric ?== metric) >-PASS 46.js - duration (0 ?== 0) >-PASS 46.js - description ( ?== ) >-PASS 47.js - count (1 ?== 1) >-PASS 47.js - name (metric ?== metric) >-PASS 47.js - duration (0 ?== 0) >-PASS 47.js - description ( ?== ) >-PASS 48.js - count (1 ?== 1) >-PASS 48.js - name (metric ?== metric) >-PASS 48.js - duration (0 ?== 0) >-PASS 48.js - description ( ?== ) >-PASS 49.js - count (1 ?== 1) >-PASS 49.js - name (metric ?== metric) >-PASS 49.js - duration (0 ?== 0) >-PASS 49.js - description ( ?== ) >-PASS 50.js - count (2 ?== 2) >-PASS 50.js - [0].name (metric ?== metric) >-PASS 50.js - [0].duration (12.3 ?== 12.3) >-PASS 50.js - [0].description (description1 ?== description1) >-PASS 50.js - [1].name (metric ?== metric) >-PASS 50.js - [1].duration (45.6 ?== 45.6) >-PASS 50.js - [1].description (description2 ?== description2) >-PASS 51.js - count (1 ?== 1) >-PASS 51.js - name (metric ?== metric) >-PASS 51.js - duration (123.4 ?== 123.4) >-PASS 51.js - description (description ?== description) >-PASS 52.js - count (1 ?== 1) >-PASS 52.js - name (MeTrIc ?== MeTrIc) >-PASS 52.js - duration (0 ?== 0) >-PASS 52.js - description (DeScRiPtIoN ?== DeScRiPtIoN) >-PASS 53.js - count (1 ?== 1) >-PASS 53.js - name (metric ?== metric) >-PASS 53.js - duration (0 ?== 0) >-PASS 53.js - description ( ?== ) >-PASS 54.js - count (1 ?== 1) >-PASS 54.js - name (metric ?== metric) >-PASS 54.js - duration (0 ?== 0) >-PASS 54.js - description ( ?== ) >-PASS 55.js - count (2 ?== 2) >-PASS 55.js - [0].name (metric1 ?== metric1) >-PASS 55.js - [0].duration (123.4 ?== 123.4) >-PASS 55.js - [0].description (description ?== description) >-PASS 55.js - [1].name (metric2 ?== metric2) >-PASS 55.js - [1].duration (0 ?== 0) >-PASS 55.js - [1].description ( ?== ) >-PASS 56.js - count (1 ?== 1) >-PASS 56.js - name (metric ?== metric) >-PASS 56.js - duration (123.4 ?== 123.4) >-PASS 56.js - description ( ?== ) >-PASS 57.js - count (1 ?== 1) >-PASS 57.js - name (metric ?== metric) >-PASS 57.js - duration (0 ?== 0) >-PASS 57.js - description ( ?== ) >-PASS 58.js - count (1 ?== 1) >-PASS 58.js - name (metric ?== metric) >-PASS 58.js - duration (0 ?== 0) >-PASS 58.js - description (description1 ?== description1) >-PASS 59.js - count (1 ?== 1) >-PASS 59.js - name (metric ?== metric) >-PASS 59.js - duration (0 ?== 0) >-PASS 59.js - description (description ?== description) >-PASS 60.js - count (1 ?== 1) >-PASS 60.js - name (metric ?== metric) >-PASS 60.js - duration (0 ?== 0) >-PASS 60.js - description (description ?== description) >-PASS 61.js - count (1 ?== 1) >-PASS 61.js - name (metric ?== metric) >-PASS 61.js - duration (123.4 ?== 123.4) >-PASS 61.js - description ( ?== ) >-PASS 62.js - count (1 ?== 1) >-PASS 62.js - name (metric ?== metric) >-PASS 62.js - duration (123.4 ?== 123.4) >-PASS 62.js - description ( ?== ) >-PASS 63.js - count (1 ?== 1) >-PASS 63.js - name (metric ?== metric) >-PASS 63.js - duration (123.4 ?== 123.4) >-PASS 63.js - description (d1 ?== d1) >-PASS 64.js - count (2 ?== 2) >-PASS 64.js - [0].name (metric1 ?== metric1) >-PASS 64.js - [0].duration (0 ?== 0) >-PASS 64.js - [0].description (d1 ?== d1) >-PASS 64.js - [1].name (metric2 ?== metric2) >-PASS 64.js - [1].duration (0 ?== 0) >-PASS 64.js - [1].description ( ?== ) >-PASS 65.js - count (1 ?== 1) >-PASS 65.js - name (metric ?== metric) >-PASS 65.js - duration (123.4 ?== 123.4) >-PASS 65.js - description (d1 ?== d1) >-PASS 66.js - count (2 ?== 2) >-PASS 66.js - [0].name (metric1 ?== metric1) >-PASS 66.js - [0].duration (0 ?== 0) >-PASS 66.js - [0].description (d1 ?== d1) >-PASS 66.js - [1].name (metric2 ?== metric2) >-PASS 66.js - [1].duration (0 ?== 0) >-PASS 66.js - [1].description ( ?== ) >-PASS 67.js - count (1 ?== 1) >-PASS 67.js - name (metric ?== metric) >-PASS 67.js - duration (0 ?== 0) >-PASS 67.js - description ( ?== ) >-PASS 68.js - count (1 ?== 1) >-PASS 68.js - name (metric1 ?== metric1) >-PASS 68.js - duration (0 ?== 0) >-PASS 68.js - description ( ?== ) >-PASS 69.js - count (1 ?== 1) >-PASS 69.js - name (metric ?== metric) >-PASS 69.js - duration (0 ?== 0) >-PASS 69.js - description ( ?== ) >-PASS 70.js - count (1 ?== 1) >-PASS 70.js - name (metric ?== metric) >-PASS 70.js - duration (0 ?== 0) >-PASS 70.js - description ( ?== ) >-PASS 71.js - count (0 ?== 0) >-PASS 72.js - count (0 ?== 0) >-PASS 73.js - count (0 ?== 0) >-PASS 74.js - count (0 ?== 0) >-PASS 75.js - count (0 ?== 0) >-PASS 76.js - count (0 ?== 0) >-PASS 77.js - count (0 ?== 0) >-PASS 78.js - count (0 ?== 0) >-PASS 79.js - count (0 ?== 0) >-PASS 80.js - count (0 ?== 0) >-PASS 81.js - count (0 ?== 0) >-PASS 82.js - count (0 ?== 0) >-PASS 83.js - count (0 ?== 0) >+FAIL Untitled TypeError: undefined is not an object (evaluating 'serverTiming.length') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt >index 153717dd85b42c7895bfdb8329c887d4b5defc03..9bf3e1e8fbe4ba67c053cf579c07d730083aab5f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/server_timing_header-parsing.https-expected.txt >@@ -1,326 +1,4 @@ >+CONSOLE MESSAGE: line 25: TypeError: undefined is not an object (evaluating 'serverTiming.length') > >-PASS 0.js - count (0 ?== 0) >-PASS 1.js - count (1 ?== 1) >-PASS 1.js - name (metric ?== metric) >-PASS 1.js - duration (0 ?== 0) >-PASS 1.js - description ( ?== ) >-PASS 2.js - count (1 ?== 1) >-PASS 2.js - name (metric ?== metric) >-PASS 2.js - duration (123.4 ?== 123.4) >-PASS 2.js - description ( ?== ) >-PASS 3.js - count (1 ?== 1) >-PASS 3.js - name (metric ?== metric) >-PASS 3.js - duration (123.4 ?== 123.4) >-PASS 3.js - description ( ?== ) >-PASS 4.js - count (1 ?== 1) >-PASS 4.js - name (metric ?== metric) >-PASS 4.js - duration (0 ?== 0) >-PASS 4.js - description (description ?== description) >-PASS 5.js - count (1 ?== 1) >-PASS 5.js - name (metric ?== metric) >-PASS 5.js - duration (0 ?== 0) >-PASS 5.js - description (description ?== description) >-PASS 6.js - count (1 ?== 1) >-PASS 6.js - name (metric ?== metric) >-PASS 6.js - duration (123.4 ?== 123.4) >-PASS 6.js - description (description ?== description) >-PASS 7.js - count (1 ?== 1) >-PASS 7.js - name (metric ?== metric) >-PASS 7.js - duration (123.4 ?== 123.4) >-PASS 7.js - description (description ?== description) >-PASS 8.js - count (1 ?== 1) >-PASS 8.js - name (aB3!#$%&'*+-.^_`|~ ?== aB3!#$%&'*+-.^_`|~) >-PASS 8.js - duration (0 ?== 0) >-PASS 8.js - description ( ?== ) >-PASS 9.js - count (1 ?== 1) >-PASS 9.js - name (metric ?== metric) >-PASS 9.js - duration (123.4 ?== 123.4) >-PASS 9.js - description (descr;,=iption ?== descr;,=iption) >-PASS 10.js - count (1 ?== 1) >-PASS 10.js - name (metric ?== metric) >-PASS 10.js - duration (0 ?== 0) >-PASS 10.js - description ( ?== ) >-PASS 11.js - count (1 ?== 1) >-PASS 11.js - name (metric ?== metric) >-PASS 11.js - duration (0 ?== 0) >-PASS 11.js - description ( ?== ) >-PASS 12.js - count (1 ?== 1) >-PASS 12.js - name (metric ?== metric) >-PASS 12.js - duration (123.4 ?== 123.4) >-PASS 12.js - description (description ?== description) >-PASS 13.js - count (1 ?== 1) >-PASS 13.js - name (metric ?== metric) >-PASS 13.js - duration (123.4 ?== 123.4) >-PASS 13.js - description (description ?== description) >-PASS 14.js - count (1 ?== 1) >-PASS 14.js - name (metric ?== metric) >-PASS 14.js - duration (0 ?== 0) >-PASS 14.js - description (description ?== description) >-PASS 15.js - count (3 ?== 3) >-PASS 15.js - [0].name (metric1 ?== metric1) >-PASS 15.js - [0].duration (12.3 ?== 12.3) >-PASS 15.js - [0].description (description1 ?== description1) >-PASS 15.js - [1].name (metric2 ?== metric2) >-PASS 15.js - [1].duration (45.6 ?== 45.6) >-PASS 15.js - [1].description (description2 ?== description2) >-PASS 15.js - [2].name (metric3 ?== metric3) >-PASS 15.js - [2].duration (78.9 ?== 78.9) >-PASS 15.js - [2].description (description3 ?== description3) >-PASS 16.js - count (5 ?== 5) >-PASS 16.js - [0].name (metric1 ?== metric1) >-PASS 16.js - [0].duration (0 ?== 0) >-PASS 16.js - [0].description ( ?== ) >-PASS 16.js - [1].name (metric2 ?== metric2) >-PASS 16.js - [1].duration (0 ?== 0) >-PASS 16.js - [1].description ( ?== ) >-PASS 16.js - [2].name (metric3 ?== metric3) >-PASS 16.js - [2].duration (0 ?== 0) >-PASS 16.js - [2].description ( ?== ) >-PASS 16.js - [3].name (metric4 ?== metric4) >-PASS 16.js - [3].duration (0 ?== 0) >-PASS 16.js - [3].description ( ?== ) >-PASS 16.js - [4].name (metric5 ?== metric5) >-PASS 16.js - [4].duration (0 ?== 0) >-PASS 16.js - [4].description ( ?== ) >-PASS 17.js - count (1 ?== 1) >-PASS 17.js - name (metric ?== metric) >-PASS 17.js - duration (0 ?== 0) >-PASS 17.js - description (description ?== description) >-PASS 18.js - count (1 ?== 1) >-PASS 18.js - name (metric ?== metric) >-PASS 18.js - duration (0 ?== 0) >-PASS 18.js - description ( description ?== description ) >-PASS 19.js - count (1 ?== 1) >-PASS 19.js - name (metric ?== metric) >-PASS 19.js - duration (0 ?== 0) >-PASS 19.js - description (descr"iption ?== descr"iption) >-PASS 20.js - count (1 ?== 1) >-PASS 20.js - name (metric ?== metric) >-PASS 20.js - duration (0 ?== 0) >-PASS 20.js - description ( ?== ) >-PASS 21.js - count (1 ?== 1) >-PASS 21.js - name (metric ?== metric) >-PASS 21.js - duration (0 ?== 0) >-PASS 21.js - description ( ?== ) >-PASS 22.js - count (1 ?== 1) >-PASS 22.js - name (metric ?== metric) >-PASS 22.js - duration (0 ?== 0) >-PASS 22.js - description ( ?== ) >-PASS 23.js - count (1 ?== 1) >-PASS 23.js - name (metric ?== metric) >-PASS 23.js - duration (0 ?== 0) >-PASS 23.js - description ( ?== ) >-PASS 24.js - count (1 ?== 1) >-PASS 24.js - name (metric ?== metric) >-PASS 24.js - duration (0 ?== 0) >-PASS 24.js - description ( ?== ) >-PASS 25.js - count (1 ?== 1) >-PASS 25.js - name (metric ?== metric) >-PASS 25.js - duration (0 ?== 0) >-PASS 25.js - description ( ?== ) >-PASS 26.js - count (1 ?== 1) >-PASS 26.js - name (metric ?== metric) >-PASS 26.js - duration (0 ?== 0) >-PASS 26.js - description ( ?== ) >-PASS 27.js - count (1 ?== 1) >-PASS 27.js - name (metric ?== metric) >-PASS 27.js - duration (0 ?== 0) >-PASS 27.js - description ( ?== ) >-PASS 28.js - count (1 ?== 1) >-PASS 28.js - name (metric ?== metric) >-PASS 28.js - duration (0 ?== 0) >-PASS 28.js - description ( ?== ) >-PASS 29.js - count (1 ?== 1) >-PASS 29.js - name (metric ?== metric) >-PASS 29.js - duration (0 ?== 0) >-PASS 29.js - description ( ?== ) >-PASS 30.js - count (1 ?== 1) >-PASS 30.js - name (metric ?== metric) >-PASS 30.js - duration (0 ?== 0) >-PASS 30.js - description ( ?== ) >-PASS 31.js - count (1 ?== 1) >-PASS 31.js - name (metric ?== metric) >-PASS 31.js - duration (0 ?== 0) >-PASS 31.js - description ( ?== ) >-PASS 32.js - count (1 ?== 1) >-PASS 32.js - name (metric ?== metric) >-PASS 32.js - duration (0 ?== 0) >-PASS 32.js - description ( ?== ) >-PASS 33.js - count (1 ?== 1) >-PASS 33.js - name (metric ?== metric) >-PASS 33.js - duration (0 ?== 0) >-PASS 33.js - description ( ?== ) >-PASS 34.js - count (1 ?== 1) >-PASS 34.js - name (metric ?== metric) >-PASS 34.js - duration (0 ?== 0) >-PASS 34.js - description ( ?== ) >-PASS 35.js - count (1 ?== 1) >-PASS 35.js - name (metric ?== metric) >-PASS 35.js - duration (0 ?== 0) >-PASS 35.js - description ( ?== ) >-PASS 36.js - count (1 ?== 1) >-PASS 36.js - name (metric ?== metric) >-PASS 36.js - duration (0 ?== 0) >-PASS 36.js - description ( ?== ) >-PASS 37.js - count (1 ?== 1) >-PASS 37.js - name (metric ?== metric) >-PASS 37.js - duration (0 ?== 0) >-PASS 37.js - description ( ?== ) >-PASS 38.js - count (1 ?== 1) >-PASS 38.js - name (metric ?== metric) >-PASS 38.js - duration (0 ?== 0) >-PASS 38.js - description ( ?== ) >-PASS 39.js - count (1 ?== 1) >-PASS 39.js - name (metric ?== metric) >-PASS 39.js - duration (0 ?== 0) >-PASS 39.js - description ( ?== ) >-PASS 40.js - count (1 ?== 1) >-PASS 40.js - name (metric ?== metric) >-PASS 40.js - duration (0 ?== 0) >-PASS 40.js - description ( ?== ) >-PASS 41.js - count (1 ?== 1) >-PASS 41.js - name (metric ?== metric) >-PASS 41.js - duration (0 ?== 0) >-PASS 41.js - description ( ?== ) >-PASS 42.js - count (1 ?== 1) >-PASS 42.js - name (metric ?== metric) >-PASS 42.js - duration (0 ?== 0) >-PASS 42.js - description ( ?== ) >-PASS 43.js - count (1 ?== 1) >-PASS 43.js - name (metric ?== metric) >-PASS 43.js - duration (0 ?== 0) >-PASS 43.js - description (\ ?== \) >-PASS 44.js - count (1 ?== 1) >-PASS 44.js - name (metric ?== metric) >-PASS 44.js - duration (0 ?== 0) >-PASS 44.js - description ( ?== ) >-PASS 45.js - count (1 ?== 1) >-PASS 45.js - name (metric ?== metric) >-PASS 45.js - duration (0 ?== 0) >-PASS 45.js - description (" ?== ") >-PASS 46.js - count (1 ?== 1) >-PASS 46.js - name (metric ?== metric) >-PASS 46.js - duration (0 ?== 0) >-PASS 46.js - description ( ?== ) >-PASS 47.js - count (1 ?== 1) >-PASS 47.js - name (metric ?== metric) >-PASS 47.js - duration (0 ?== 0) >-PASS 47.js - description ( ?== ) >-PASS 48.js - count (1 ?== 1) >-PASS 48.js - name (metric ?== metric) >-PASS 48.js - duration (0 ?== 0) >-PASS 48.js - description ( ?== ) >-PASS 49.js - count (1 ?== 1) >-PASS 49.js - name (metric ?== metric) >-PASS 49.js - duration (0 ?== 0) >-PASS 49.js - description ( ?== ) >-PASS 50.js - count (2 ?== 2) >-PASS 50.js - [0].name (metric ?== metric) >-PASS 50.js - [0].duration (12.3 ?== 12.3) >-PASS 50.js - [0].description (description1 ?== description1) >-PASS 50.js - [1].name (metric ?== metric) >-PASS 50.js - [1].duration (45.6 ?== 45.6) >-PASS 50.js - [1].description (description2 ?== description2) >-PASS 51.js - count (1 ?== 1) >-PASS 51.js - name (metric ?== metric) >-PASS 51.js - duration (123.4 ?== 123.4) >-PASS 51.js - description (description ?== description) >-PASS 52.js - count (1 ?== 1) >-PASS 52.js - name (MeTrIc ?== MeTrIc) >-PASS 52.js - duration (0 ?== 0) >-PASS 52.js - description (DeScRiPtIoN ?== DeScRiPtIoN) >-PASS 53.js - count (1 ?== 1) >-PASS 53.js - name (metric ?== metric) >-PASS 53.js - duration (0 ?== 0) >-PASS 53.js - description ( ?== ) >-PASS 54.js - count (1 ?== 1) >-PASS 54.js - name (metric ?== metric) >-PASS 54.js - duration (0 ?== 0) >-PASS 54.js - description ( ?== ) >-PASS 55.js - count (2 ?== 2) >-PASS 55.js - [0].name (metric1 ?== metric1) >-PASS 55.js - [0].duration (123.4 ?== 123.4) >-PASS 55.js - [0].description (description ?== description) >-PASS 55.js - [1].name (metric2 ?== metric2) >-PASS 55.js - [1].duration (0 ?== 0) >-PASS 55.js - [1].description ( ?== ) >-PASS 56.js - count (1 ?== 1) >-PASS 56.js - name (metric ?== metric) >-PASS 56.js - duration (123.4 ?== 123.4) >-PASS 56.js - description ( ?== ) >-PASS 57.js - count (1 ?== 1) >-PASS 57.js - name (metric ?== metric) >-PASS 57.js - duration (0 ?== 0) >-PASS 57.js - description ( ?== ) >-PASS 58.js - count (1 ?== 1) >-PASS 58.js - name (metric ?== metric) >-PASS 58.js - duration (0 ?== 0) >-PASS 58.js - description (description1 ?== description1) >-PASS 59.js - count (1 ?== 1) >-PASS 59.js - name (metric ?== metric) >-PASS 59.js - duration (0 ?== 0) >-PASS 59.js - description (description ?== description) >-PASS 60.js - count (1 ?== 1) >-PASS 60.js - name (metric ?== metric) >-PASS 60.js - duration (0 ?== 0) >-PASS 60.js - description (description ?== description) >-PASS 61.js - count (1 ?== 1) >-PASS 61.js - name (metric ?== metric) >-PASS 61.js - duration (123.4 ?== 123.4) >-PASS 61.js - description ( ?== ) >-PASS 62.js - count (1 ?== 1) >-PASS 62.js - name (metric ?== metric) >-PASS 62.js - duration (123.4 ?== 123.4) >-PASS 62.js - description ( ?== ) >-PASS 63.js - count (1 ?== 1) >-PASS 63.js - name (metric ?== metric) >-PASS 63.js - duration (123.4 ?== 123.4) >-PASS 63.js - description (d1 ?== d1) >-PASS 64.js - count (2 ?== 2) >-PASS 64.js - [0].name (metric1 ?== metric1) >-PASS 64.js - [0].duration (0 ?== 0) >-PASS 64.js - [0].description (d1 ?== d1) >-PASS 64.js - [1].name (metric2 ?== metric2) >-PASS 64.js - [1].duration (0 ?== 0) >-PASS 64.js - [1].description ( ?== ) >-PASS 65.js - count (1 ?== 1) >-PASS 65.js - name (metric ?== metric) >-PASS 65.js - duration (123.4 ?== 123.4) >-PASS 65.js - description (d1 ?== d1) >-PASS 66.js - count (2 ?== 2) >-PASS 66.js - [0].name (metric1 ?== metric1) >-PASS 66.js - [0].duration (0 ?== 0) >-PASS 66.js - [0].description (d1 ?== d1) >-PASS 66.js - [1].name (metric2 ?== metric2) >-PASS 66.js - [1].duration (0 ?== 0) >-PASS 66.js - [1].description ( ?== ) >-PASS 67.js - count (1 ?== 1) >-PASS 67.js - name (metric ?== metric) >-PASS 67.js - duration (0 ?== 0) >-PASS 67.js - description ( ?== ) >-PASS 68.js - count (1 ?== 1) >-PASS 68.js - name (metric1 ?== metric1) >-PASS 68.js - duration (0 ?== 0) >-PASS 68.js - description ( ?== ) >-PASS 69.js - count (1 ?== 1) >-PASS 69.js - name (metric ?== metric) >-PASS 69.js - duration (0 ?== 0) >-PASS 69.js - description ( ?== ) >-PASS 70.js - count (1 ?== 1) >-PASS 70.js - name (metric ?== metric) >-PASS 70.js - duration (0 ?== 0) >-PASS 70.js - description ( ?== ) >-PASS 71.js - count (0 ?== 0) >-PASS 72.js - count (0 ?== 0) >-PASS 73.js - count (0 ?== 0) >-PASS 74.js - count (0 ?== 0) >-PASS 75.js - count (0 ?== 0) >-PASS 76.js - count (0 ?== 0) >-PASS 77.js - count (0 ?== 0) >-PASS 78.js - count (0 ?== 0) >-PASS 79.js - count (0 ?== 0) >-PASS 80.js - count (0 ?== 0) >-PASS 81.js - count (0 ?== 0) >-PASS 82.js - count (0 ?== 0) >-PASS 83.js - count (0 ?== 0) >+FAIL Untitled TypeError: undefined is not an object (evaluating 'serverTiming.length') > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/server-timing/service_worker_idl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/server-timing/service_worker_idl-expected.txt >index c2c15e0b8a0e54a623bcb4fdca1f4cef72eeb240..855f75e897ea2161bb36bc5f0f41f7e0895240fa 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/server-timing/service_worker_idl-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/server-timing/service_worker_idl-expected.txt >@@ -1,3 +1,5 @@ > >-PASS Untitled >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT Untitled Test timed out > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https-expected.txt >index a97cea3047151683b77cdc5ddce3b6c80f077920..3dcc2a2f2ec2b3507e42627908136825320cd937 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-redirect.https-expected.txt >@@ -1,9 +1,7 @@ > CONSOLE MESSAGE: line 51: No-Cors mode requires follow redirect mode >-CONSOLE MESSAGE: line 51: Not allowed to request resource >-CONSOLE MESSAGE: line 51: Fetch API cannot load https://localhost:9443/nonav-manual-nocors-redirects-to-sameorigin-nocreds?url=redirect.py%3FRedirect%3Dhttps%253A%252F%252Flocalhost%253A9443%252Fservice-workers%252Fservice-worker%252Fresources%252Fsuccess.py&expected_type=opaqueredirect due to access control checks. >+CONSOLE MESSAGE: line 51: Fetch API cannot load https://localhost:9443/nonav-manual-nocors-redirects-to-sameorigin-nocreds?url=redirect.py%3FRedirect%3Dhttps%253A%252F%252Flocalhost%253A9443%252Fservice-workers%252Fservice-worker%252Fresources%252Fsuccess.py&expected_type=opaqueredirect. Not allowed to request resource > CONSOLE MESSAGE: line 51: No-Cors mode requires follow redirect mode >-CONSOLE MESSAGE: line 51: Not allowed to request resource >-CONSOLE MESSAGE: line 51: Fetch API cannot load https://localhost:9443/nonav-error-nocors-redirects-to-sameorigin-nocreds?url=redirect.py%3FRedirect%3Dhttps%253A%252F%252Flocalhost%253A9443%252Fservice-workers%252Fservice-worker%252Fresources%252Fsuccess.py due to access control checks. >+CONSOLE MESSAGE: line 51: Fetch API cannot load https://localhost:9443/nonav-error-nocors-redirects-to-sameorigin-nocreds?url=redirect.py%3FRedirect%3Dhttps%253A%252F%252Flocalhost%253A9443%252Fservice-workers%252Fservice-worker%252Fresources%252Fsuccess.py. Not allowed to request resource > > PASS initialize global state > PASS Non-navigation, manual redirect, cors mode Request redirected to same-origin without credentials should succeed opaqueredirect interception and response should not be redirected >diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt >index 2d647629c2e40f4245026a0cc252b6879439f55f..c8b52445c02db6c9c255744f04964eea5bb080a1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt >@@ -3,9 +3,9 @@ CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-worke > CONSOLE MESSAGE: Origin https://localhost:9443 is not allowed by Access-Control-Allow-Origin. > CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-workers/service-worker/resources/fetch-access-control.py? due to access control checks. > CONSOLE MESSAGE: Origin https://localhost:9443 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Cannot load image https://127.0.0.1:9443/service-workers/service-worker/resources/fetch-access-control.py?PNGIMAGE& due to access control checks. >+CONSOLE MESSAGE: Cross-origin image load denied by Cross-Origin Resource Sharing policy. > CONSOLE MESSAGE: Origin https://localhost:9443 is not allowed by Access-Control-Allow-Origin. >-CONSOLE MESSAGE: Cannot load image https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2F127.0.0.1%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Ffetch-access-control.py%3FPNGIMAGE%26 due to access control checks. >+CONSOLE MESSAGE: Cross-origin image load denied by Cross-Origin Resource Sharing policy. > > PASS initialize global state > PASS The SW must intercept the request for a main resource. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https-expected.txt >index 46415e9cffb4b540478fbbba1e4e21884032f5d2..fa0f65aaaf5492c35ced530fa20951e0b9481a11 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/opaque-response-preloaded.https-expected.txt >@@ -1,7 +1,5 @@ >-CONSOLE MESSAGE: Response served by service worker is opaque >-CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-workers/service-worker/resources/simple.txt due to access control checks. >-CONSOLE MESSAGE: Response served by service worker is opaque >-CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-workers/service-worker/resources/simple.txt due to access control checks. >+CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-workers/service-worker/resources/simple.txt. Response served by service worker is opaque >+CONSOLE MESSAGE: XMLHttpRequest cannot load https://127.0.0.1:9443/service-workers/service-worker/resources/simple.txt. Response served by service worker is opaque > > PASS Opaque responses should not be reused for XHRs, loading case > PASS Opaque responses should not be reused for XHRs, done case >diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt >index 6c652076a9f02513e1ca9dd1e47ccf950f570e43..d7d7ca1c6ee9abf45726cbffc6aaf14086840fa0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt >@@ -1,15 +1,8 @@ >-CONSOLE MESSAGE: Not allowed to follow a redirection while loading https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&error >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&error due to access control checks. >-CONSOLE MESSAGE: Response served by service worker has redirections >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/simple.txt? due to access control checks. >-CONSOLE MESSAGE: Response served by service worker has redirections >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/simple.txt? due to access control checks. >-CONSOLE MESSAGE: Response served by service worker is opaque redirect >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=follow&sw=manual due to access control checks. >-CONSOLE MESSAGE: Response served by service worker is opaque redirect >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=error&sw=manual due to access control checks. >-CONSOLE MESSAGE: Not allowed to follow a redirection while loading https://localhost:9443/service-workers/service-worker/dummy?url=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=error&sw=gen >-CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/dummy?url=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=error&sw=gen due to access control checks. >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&error. Redirections are not allowed >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/simple.txt?. Response served by service worker has redirections >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/simple.txt?. Response served by service worker has redirections >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=follow&sw=manual. Response served by service worker is opaque redirect >+CONSOLE MESSAGE: Fetch API cannot load https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=https%3A%2F%2Flocalhost%3A9443%2Fservice-workers%2Fservice-worker%2Fresources%2Fsimple.txt%3F&original-redirect-mode=error&sw=manual. Response served by service worker is opaque redirect > > PASS initialize global state (service worker registration and caches) > PASS mode: "follow", non-intercepted request, no server redirect >diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/registration-security-error.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/registration-security-error.https-expected.txt >index 0eebcb2db43644b266d2c4cb6fa26e26da3eed22..fae5ef2c831c2305c17145035976cb0b40877676 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/registration-security-error.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/registration-security-error.https-expected.txt >@@ -3,7 +3,7 @@ PASS Registering same scope as the script directory without the last slash > PASS Registration scope outside the script directory > PASS Registering scope outside domain > PASS Registering script outside domain >-FAIL Registering redirected script assert_throws: Registration of redirected script should fail. function "function () { throw e }" threw object "TypeError: Script URL https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=%2Fservice-workers%2Fservice-worker%2Fresources%2Fregistration-worker.js fetch resulted in error: Not allowed to follow a redirection while loading https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=%2Fservice-workers%2Fservice-worker%2Fresources%2Fregistration-worker.js" that is not a DOMException SecurityError: property "code" is equal to undefined, expected 18 >+FAIL Registering redirected script assert_throws: Registration of redirected script should fail. function "function () { throw e }" threw object "TypeError: Script URL https://localhost:9443/service-workers/service-worker/resources/redirect.py?Redirect=%2Fservice-workers%2Fservice-worker%2Fresources%2Fregistration-worker.js fetch resulted in error: Redirections are not allowed" that is not a DOMException SecurityError: property "code" is equal to undefined, expected 18 > PASS Scope including parent-reference and not under the script directory > PASS Script URL including consecutive slashes > FAIL Script URL is same-origin filesystem: URL assert_throws: Registering a script which has same-origin filesystem: URL should fail with SecurityError. function "function () { throw e }" threw object "TypeError: serviceWorker.register() must be called with a script URL whose protocol is either HTTP or HTTPS" that is not a DOMException SecurityError: property "code" is equal to undefined, expected 18 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources-expected.txt >index 51e6be5daccdcc3c60e9bced5cde53df873237e9..dc2e1836bb025f4b11e3a676d47295cad2a48e91 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources-expected.txt >@@ -24,8 +24,8 @@ PASS Underlying source: calling close twice on a non-empty stream should throw t > PASS Underlying source: calling close on an empty canceled stream should throw > PASS Underlying source: calling close on a non-empty canceled stream should throw > PASS Underlying source: calling close after error should throw >-PASS Underlying source: calling error twice should not throw >-PASS Underlying source: calling error after close should not throw >+FAIL Underlying source: calling error twice should not throw ReadableStream is not readable >+FAIL Underlying source: calling error after close should not throw ReadableStream is not readable > PASS Underlying source: calling error and returning a rejected promise from start should cause the stream to error with the first error > PASS Underlying source: calling error and returning a rejected promise from pull should cause the stream to error with the first error > PASS read should not error if it dequeues and pull() throws >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.dedicatedworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.dedicatedworker-expected.txt >index 51e6be5daccdcc3c60e9bced5cde53df873237e9..dc2e1836bb025f4b11e3a676d47295cad2a48e91 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.dedicatedworker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.dedicatedworker-expected.txt >@@ -24,8 +24,8 @@ PASS Underlying source: calling close twice on a non-empty stream should throw t > PASS Underlying source: calling close on an empty canceled stream should throw > PASS Underlying source: calling close on a non-empty canceled stream should throw > PASS Underlying source: calling close after error should throw >-PASS Underlying source: calling error twice should not throw >-PASS Underlying source: calling error after close should not throw >+FAIL Underlying source: calling error twice should not throw ReadableStream is not readable >+FAIL Underlying source: calling error after close should not throw ReadableStream is not readable > PASS Underlying source: calling error and returning a rejected promise from start should cause the stream to error with the first error > PASS Underlying source: calling error and returning a rejected promise from pull should cause the stream to error with the first error > PASS read should not error if it dequeues and pull() throws >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt >index dff3da3bb5d915442c374038aea3a76926901171..b3dae7d063ba3ef9056f1dffed8635a3caea467b 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt >@@ -25,8 +25,8 @@ PASS Underlying source: calling close twice on a non-empty stream should throw t > PASS Underlying source: calling close on an empty canceled stream should throw > PASS Underlying source: calling close on a non-empty canceled stream should throw > PASS Underlying source: calling close after error should throw >-PASS Underlying source: calling error twice should not throw >-PASS Underlying source: calling error after close should not throw >+FAIL Underlying source: calling error twice should not throw ReadableStream is not readable >+FAIL Underlying source: calling error after close should not throw ReadableStream is not readable > PASS Underlying source: calling error and returning a rejected promise from start should cause the stream to error with the first error > PASS Underlying source: calling error and returning a rejected promise from pull should cause the stream to error with the first error > PASS read should not error if it dequeues and pull() throws >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection-expected.txt >index 010f50a0c1385db6107d346d9551f0f710e6d52b..c72ce18de4ad82cbc5a038a4c6c325a13f253c57 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection-expected.txt >@@ -1,5 +1,5 @@ > >-PASS ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream >+FAIL ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream promise_test: Unhandled rejection with value: object "TypeError: ReadableStream is not readable" > PASS ReadableStream closed promise should fulfill even if the stream and reader JS references are lost > PASS ReadableStream closed promise should reject even if stream and reader JS references are lost > PASS Garbage-collecting a ReadableStreamDefaultReader should not unlock its stream >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.dedicatedworker-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.dedicatedworker-expected.txt >index 010f50a0c1385db6107d346d9551f0f710e6d52b..c72ce18de4ad82cbc5a038a4c6c325a13f253c57 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.dedicatedworker-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.dedicatedworker-expected.txt >@@ -1,5 +1,5 @@ > >-PASS ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream >+FAIL ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream promise_test: Unhandled rejection with value: object "TypeError: ReadableStream is not readable" > PASS ReadableStream closed promise should fulfill even if the stream and reader JS references are lost > PASS ReadableStream closed promise should reject even if stream and reader JS references are lost > PASS Garbage-collecting a ReadableStreamDefaultReader should not unlock its stream >diff --git a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt >index effb9b528b032aa6fa0451b084e6109883de046e..c171d126d65a608b54763dbebc06157876a9717f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt >@@ -1,6 +1,6 @@ > > PASS Service worker test setup >-PASS ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream >+FAIL ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream promise_test: Unhandled rejection with value: object "TypeError: ReadableStream is not readable" > PASS ReadableStream closed promise should fulfill even if the stream and reader JS references are lost > PASS ReadableStream closed promise should reject even if stream and reader JS references are lost > PASS Garbage-collecting a ReadableStreamDefaultReader should not unlock its stream >diff --git a/LayoutTests/imported/w3c/web-platform-tests/url/url-setters-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/url/url-setters-expected.txt >index fbd5c5b9f52de5afc95d6461c4f9b8c409cf496b..a09021b8ddb6cecb5b8dbf36f5b6cbed609ecb8c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/url/url-setters-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/url/url-setters-expected.txt >@@ -198,12 +198,12 @@ FAIL <area>: Setting <sc://x/>.host = '?' assert_equals: expected "sc:///" but g > PASS URL: Setting <sc://x/>.host = '@' > FAIL <a>: Setting <sc://x/>.host = '@' assert_equals: expected "sc://x/" but got "sc://@/" > FAIL <area>: Setting <sc://x/>.host = '@' assert_equals: expected "sc://x/" but got "sc://@/" >-FAIL URL: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://xn--zca/" >-FAIL <a>: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://xn--zca/" >-FAIL <area>: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://xn--zca/" >-PASS URL: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing >-PASS <a>: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing >-PASS <area>: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing >+FAIL URL: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://ss/" >+FAIL <a>: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://ss/" >+FAIL <area>: Setting <sc://x/>.host = 'Ã' assert_equals: expected "sc://%C3%9F/" but got "sc://ss/" >+FAIL URL: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing assert_equals: expected "https://xn--zca/" but got "https://ss/" >+FAIL <a>: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing assert_equals: expected "https://xn--zca/" but got "https://ss/" >+FAIL <area>: Setting <https://x/>.host = 'Ã' IDNA Nontransitional_Processing assert_equals: expected "https://xn--zca/" but got "https://ss/" > PASS URL: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host > PASS <a>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host > PASS <area>: Setting <mailto:me@example.net>.host = 'example.com' Cannot-be-a-base means no host >diff --git a/LayoutTests/imported/w3c/web-platform-tests/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/w3c-import.log >index d45b103be57b10cd5305838e0da817a9cd2f3a3a..fd74882a3d0352fdc3a4f3146a742681d30aba45 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/w3c-import.log >@@ -14,11 +14,11 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/CODEOWNERS > /LayoutTests/imported/w3c/web-platform-tests/CONTRIBUTING.md > /LayoutTests/imported/w3c/web-platform-tests/LICENSE.md > /LayoutTests/imported/w3c/web-platform-tests/README.md > /LayoutTests/imported/w3c/web-platform-tests/check_stability.ini >-/LayoutTests/imported/w3c/web-platform-tests/config.default.json > /LayoutTests/imported/w3c/web-platform-tests/lint.whitelist > /LayoutTests/imported/w3c/web-platform-tests/serve.py > /LayoutTests/imported/w3c/web-platform-tests/server-side.md >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..fc40cda0c694bd06fd86c75e53240a93543d7518 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/OWNERS >@@ -0,0 +1,3 @@ >+@andrey-logvinov >+@marcoscaceres >+@Honry >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f042fafbced78552db8da75bf4f58d4829c48c6d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test IDL implementation of WakeLock API promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..58b43fff1e9a6cbbed542bcb0855a64d6f8a2d75 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https.html >@@ -0,0 +1,33 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Wake Lock API IDL tests</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/WebIDLParser.js"></script> >+<script src="/resources/idlharness.js"></script> >+<script> >+"use strict"; >+ >+promise_test(async () => { >+ const idl_array = new IdlArray(); >+ const dom_idl = await fetch("/interfaces/dom.idl").then(r => r.text()); >+ const wakelock_idl = await fetch("/interfaces/wake-lock.idl").then(r => r.text()); >+ const wakelock = await navigator.getWakeLock("screen"); >+ >+ idl_array.add_untested_idls(dom_idl); >+ idl_array.add_untested_idls('interface EventHandler {};'); >+ idl_array.add_untested_idls('interface Navigator {};'); >+ idl_array.add_idls(wakelock_idl); >+ >+ window.wakelock = wakelock; >+ window.request = wakelock.createRequest(); >+ >+ idl_array.add_objects({ >+ Navigator: ['navigator'], >+ WakeLock: ['wakelock'], >+ WakeLockRequest: ['request'] >+ }); >+ idl_array.test(); >+}, "Test IDL implementation of WakeLock API"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..952337510a30ecc5ba7eb485dcb352d94925a197 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/w3c-import.log >@@ -0,0 +1,36 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/interfaces.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https.html >+/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ec103270dd5003e64dd84563d491a24179ee69ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test that the Wake Lock API is correct assert_true: Wake Lock API is present expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7ec4fc2827a77421cc16838e2458443265c1dccf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-api.https.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Wake Lock API Test</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+promise_test(async t => { >+ assert_true("getWakeLock" in navigator, "Wake Lock API is present"); >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const request = wakeLock.createRequest(); >+ assert_true(wakeLock instanceof WakeLock, "wakeLock is a WakeLock"); >+ assert_true(wakeLock.type instanceof WakeLockType, "wakeLock.type is a WakeLockType"); >+ assert_equals(typeof wakeLock.active, "boolean", "the type of wakeLock.active is boolean"); >+ assert_true(request instanceof WakeLockRequest, "request is a WakeLockRequest"); >+}, "Test that the Wake Lock API is correct"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c0082223d2b904bdd361cb49c40e203d7e16c32e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https-expected.txt >@@ -0,0 +1,8 @@ >+Lock and turn off the screen, then turn on and unlock the screen. >+ >+Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT. >+ >+ >+FAIL The screen wake lock isn't applicable after the screen is manually swiched off by the user until it is switched on again. promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+FAIL Manually switching off the screen will not affect the applicability of the system wake lock. promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("system")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5dbd27818ddfee7564c8e4def594adc67ed276f2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-applicability-manual.https.html >@@ -0,0 +1,51 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>wake lock applicability test</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-the-wake-lock-is-applicable"> >+<meta name="flags" content="interact"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<p> >+ Lock and turn off the screen, then turn on and unlock the screen. >+</p> >+<p> >+ Note: All the actions need to be done in 60 seconds, otherwise it will get TIMEOUT. >+</p> >+<script> >+ >+setup({ explicit_timeout: true }); >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const request = wakeLock.createRequest(); >+ assert_true(wakeLock.active, "the active is true when wake lock is acquired"); >+ const eventWatcher = new EventWatcher(t, document, "visibilitychange") >+ >+ //lock screen to fire 'visibilitychange' >+ await eventWatcher.wait_for("visibilitychange"); >+ assert_true(document.hidden, "document is hidden when screen is locked"); >+ assert_false(wakeLock.active, "the screen wake lock is not active when screen is switched off"); >+ >+ //unlock screen to fire 'visibilitychange' >+ await eventWatcher.wait_for("visibilitychange"); >+ assert_false(document.hidden, "document is visiable when screen is unlocked"); >+ assert_true(wakeLock.active, "the screen wake lock is active when screen is switched on again"); >+ request.cancel(); >+}, "The screen wake lock isn't applicable after the screen is manually swiched off" >+ + " by the user until it is switched on again."); >+ >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("system"); >+ const request = wakeLock.createRequest(); >+ assert_true(wakeLock.active, "the active is true when wake lock is acquired"); >+ const eventWatcher = new EventWatcher(t, document, "visibilitychange") >+ >+ //lock screen to fire 'visibilitychange' >+ await eventWatcher.wait_for("visibilitychange"); >+ assert_true(document.hidden, "document is hidden when screen is locked"); >+ assert_true(wakeLock.active, "the system wake lock is still active when screen is switched off"); >+ request.cancel(); >+}, "Manually switching off the screen will not affect the applicability of the system wake lock."); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..06895a69e725ce00bf8d16675a53c9668db129cd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL no exception is thrown when invoking cancel() twice promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..68e8a1958165d9053eedf1bb97fd67e8eece15fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-cancel-twice.https.html >@@ -0,0 +1,20 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>no exception is thrown when invoking cancel() twice</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/#dom-wakelockrequest-cancel"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const request = wakeLock.createRequest(); >+ assert_true(wakeLock.active, "the activate is true when wake lock is acquired"); >+ request.cancel(); >+ assert_false(wakeLock.active, "the activate is false when wake lock is released"); >+ //If the cancel() method has already been invoked on this object, >+ //abort these steps, no error fired >+ request.cancel(); >+}, "no exception is thrown when invoking cancel() twice"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..df7957f0ff2a68da7786d874061a6d5b7ccf3163 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub-expected.txt >@@ -0,0 +1,9 @@ >+Blocked access to external URL https://www.localhost:9443/feature-policy/resources/feature-policy-wakelock.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL Feature-Policy header {"wake-lock" : []} disallows the top-level document. navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined) >+TIMEOUT Feature-Policy header {"wake-lock" : []} disallows same-origin iframes. Test timed out >+TIMEOUT Feature-Policy header {"wake-lock" : []} disallows cross-origin iframes. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..75064767ceebeb3abfad31f9dc9a8a2b91e10e44 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/feature-policy/resources/featurepolicy.js"></script> >+<script> >+ "use strict"; >+ >+ const same_origin_src = >+ "/feature-policy/resources/feature-policy-wakelock.html"; >+ const cross_origin_src = >+ "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src; >+ >+ promise_test(t => { >+ return promise_rejects(t, "SecurityError", navigator.getWakeLock("screen")); >+ }, 'Feature-Policy header {"wake-lock" : []} disallows the top-level document.'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ same_origin_src, >+ expect_feature_unavailable_default >+ ); >+ }, 'Feature-Policy header {"wake-lock" : []} disallows same-origin iframes.'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ cross_origin_src, >+ expect_feature_unavailable_default >+ ); >+ }, 'Feature-Policy header {"wake-lock" : []} disallows cross-origin iframes.'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..1d3769ec794b353e8c614e64ce2c1b0b1010e528 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-disabled-by-feature-policy.https.sub.html.headers >@@ -0,0 +1 @@ >+Feature-Policy: wake-lock 'none' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..236ac23c7bf236b2384c5690f1ddfa84a027512b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test that screen wake lock will not be actived in hidden document promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6bb406a1c2e62a490e394ba1abceba9353ab6285 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-document-hidden.https.html >@@ -0,0 +1,27 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>screen wake lock will not be actived in hidden document</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-requesting-the-wake-lock"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const request = wakeLock.createRequest(); >+ assert_true(wakeLock.active, "the active is true when wake lock is acquired"); >+ const eventWatcher = new EventWatcher(t, document, "visibilitychange"); >+ const win = window.open("about:blank", "_blank"); >+ >+ await eventWatcher.wait_for("visibilitychange"); >+ assert_true(document.hidden, "document is hidden when new window is opened"); >+ assert_false(wakeLock.active, "the active is false when document is hidden"); >+ win.close(); >+ >+ await eventWatcher.wait_for("visibilitychange"); >+ assert_false(document.hidden, "document is visiable when new window is closed"); >+ assert_true(wakeLock.active, "the active is true when document regains visibility"); >+ request.cancel(); >+}, "Test that screen wake lock will not be actived in hidden document"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..099059d998c7cdabc102bf7ad136e3a934d2e7eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt >@@ -0,0 +1,8 @@ >+Blocked access to external URL https://www.localhost:9443/feature-policy/resources/feature-policy-wakelock.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT Feature-Policy allow="wake-lock" allows same-origin relocation Test timed out >+TIMEOUT Feature-Policy allow="wake-lock" disallows cross-origin relocation Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..74875937f6ec35ecdca2049e27999b3df6bd0c5d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html >@@ -0,0 +1,36 @@ >+<!DOCTYPE html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/feature-policy/resources/featurepolicy.js"></script> >+<script> >+ "use strict"; >+ >+ const relative_path = "/feature-policy/resources/feature-policy-wakelock.html"; >+ const base_src = "/feature-policy/resources/redirect-on-load.html#"; >+ const same_origin_src = base_src + relative_path; >+ const cross_origin_src = >+ base_src + "https://{{domains[www]}}:{{ports[https][0]}}" + relative_path; >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ same_origin_src, >+ expect_feature_available_default, >+ "wake-lock" >+ ); >+ }, 'Feature-Policy allow="wake-lock" allows same-origin relocation'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ cross_origin_src, >+ expect_feature_unavailable_default, >+ "wake-lock" >+ ); >+ }, 'Feature-Policy allow="wake-lock" disallows cross-origin relocation'); >+ >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ceb8d8b28e20825137f3ede791132f92cc343c36 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub-expected.txt >@@ -0,0 +1,8 @@ >+Blocked access to external URL https://www.localhost:9443/feature-policy/resources/feature-policy-wakelock.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT Feature policy "wake-lock" can be enabled in same-origin iframe using allow="wake-lock" attribute Test timed out >+TIMEOUT Feature policy "wake-lock" can be enabled in cross-origin iframe using allow="wake-lock" attribute Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..185f5ad11b152b0f1ee42364022ef0d9ea0e9d2c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy-attribute.https.sub.html >@@ -0,0 +1,34 @@ >+<!DOCTYPE html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/feature-policy/resources/featurepolicy.js"></script> >+<script> >+ "use strict"; >+ >+ const same_origin_src = >+ "/feature-policy/resources/feature-policy-wakelock.html"; >+ const cross_origin_src = >+ "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src; >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ same_origin_src, >+ expect_feature_available_default, >+ "wake-lock" >+ ); >+ }, 'Feature policy "wake-lock" can be enabled in same-origin iframe using allow="wake-lock" attribute'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ cross_origin_src, >+ expect_feature_available_default, >+ "wake-lock" >+ ); >+ }, 'Feature policy "wake-lock" can be enabled in cross-origin iframe using allow="wake-lock" attribute'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..80a579464c7ece06bad678d717cd7c124626923e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub-expected.txt >@@ -0,0 +1,9 @@ >+Blocked access to external URL https://www.localhost:9443/feature-policy/resources/feature-policy-wakelock.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL Feature-Policy header {"wake-lock" : ["*"]} allows the top-level document. navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined) >+TIMEOUT Feature-Policy header {"wake-lock" : ["*"]} allows same-origin iframes. Test timed out >+TIMEOUT Feature-Policy header {"wake-lock" : ["*"]} allows cross-origin iframes. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eb49be5d44b0d7ffefb3900e60a5524dbb77ece4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/feature-policy/resources/featurepolicy.js"></script> >+<script> >+ "use strict"; >+ >+ const same_origin_src = >+ "/feature-policy/resources/feature-policy-wakelock.html"; >+ const cross_origin_src = >+ "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src; >+ >+ promise_test( >+ () => navigator.getWakeLock("screen"), >+ 'Feature-Policy header {"wake-lock" : ["*"]} allows the top-level document.' >+ ); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ same_origin_src, >+ expect_feature_available_default >+ ); >+ }, 'Feature-Policy header {"wake-lock" : ["*"]} allows same-origin iframes.'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ cross_origin_src, >+ expect_feature_available_default >+ ); >+ }, 'Feature-Policy header {"wake-lock" : ["*"]} allows cross-origin iframes.'); >+ >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..34b7437443cd9998c423260d05202be05d7b5d38 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-by-feature-policy.https.sub.html.headers >@@ -0,0 +1 @@ >+Feature-Policy: wake-lock * >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4dcf5f5b6a0bd24157e49c76ecc76530931d8499 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub-expected.txt >@@ -0,0 +1,9 @@ >+Blocked access to external URL https://www.localhost:9443/feature-policy/resources/feature-policy-wakelock.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL Feature-Policy header wake-lock "self" allows the top-level document. navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined) >+TIMEOUT Feature-Policy header wake-lock "self" allows same-origin iframes. Test timed out >+TIMEOUT Feature-Policy header wake-lock "self" disallows cross-origin iframes. Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dbd8ec99f81e7d2530f5cdaadcffc1248e3f5c40 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html >@@ -0,0 +1,37 @@ >+<!DOCTYPE html> >+<body> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/feature-policy/resources/featurepolicy.js"></script> >+ >+<script> >+ "use strict"; >+ >+ const same_origin_src = >+ "/feature-policy/resources/feature-policy-wakelock.html"; >+ const cross_origin_src = >+ "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_src; >+ >+ promise_test(() => { >+ navigator.getWakeLock("screen"); >+ }, 'Feature-Policy header wake-lock "self" allows the top-level document.'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ same_origin_src, >+ expect_feature_available_default >+ ); >+ }, 'Feature-Policy header wake-lock "self" allows same-origin iframes.'); >+ >+ async_test(t => { >+ test_feature_availability( >+ 'navigator.getWakeLock("screen")', >+ t, >+ cross_origin_src, >+ expect_feature_unavailable_default >+ ); >+ }, 'Feature-Policy header wake-lock "self" disallows cross-origin iframes.'); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..6f05d23550e2b0c967fac5b436a5e3336222ffe2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-enabled-on-self-origin-by-feature-policy.https.sub.html.headers >@@ -0,0 +1 @@ >+Feature-Policy: wake-lock 'self' >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8ea7aa84b683273a41843806f03d83841d755fbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS Wake Lock API is not exposed in an insecure context >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8d728f83e5d14b951ba4f151a7eb06f5257df475 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-insecure-context.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Wake Lock API is not exposed in an insecure context</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/#wake-locks"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+test(t => { >+ assert_false("getWakeLock" in navigator, "'getWakeLock' must not be exposed"); >+}, "Wake Lock API is not exposed in an insecure context"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..871d6ac189f6d0fc5c43b81d239166aebfc6782e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test that 'activechange' event is fire and wakeLock.active is valid promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..899b9b78d95c66a41f33b57ceac55e12eba9ec6e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-onactivechange.https.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>Wake Lock 'onactivechange' Test</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const eventWatcher = new EventWatcher(t, wakeLock, "activechange"); >+ assert_false(wakeLock.active, "the active is false before wake lock is acquired"); >+ >+ let request = wakeLock.createRequest(); >+ let evt1 = await eventWatcher.wait_for("activechange"); >+ assert_true(evt1.isTrusted && !evt1.bubbles && !evt1.cancelable && evt1 instanceof Event, "a simple event is fired"); >+ assert_equals(evt1.type, "activechange", "the event name is 'activechange'"); >+ assert_equals(evt1.target, wakeLock, "event.target is WakeLock."); >+ assert_true(wakeLock.active, "the active is true when wake lock is acquired"); >+ >+ request.cancel(); >+ let evt2 = await eventWatcher.wait_for("activechange"); >+ assert_true(evt2.isTrusted && !evt2.bubbles && !evt2.cancelable && evt2 instanceof Event, "a simple event is fired"); >+ assert_false(wakeLock.active, "the active is false when wake lock is released"); >+}, "Test that 'activechange' event is fire and wakeLock.active is valid"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4a9978c796cadf96050c1ef3e13186cd07f2db2a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL navigator.getWakeLock() for the same Document always return same WakeLock promise promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3d4c4868699c9c77a6636e3246c65de7b71dc36a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-promise.https.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>navigator.getWakeLock() for the same Document always return same WakeLock promise</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+promise_test(async t => { >+ const wakeLock1 = await navigator.getWakeLock("screen"); >+ const wakeLock2 = await navigator.getWakeLock("screen"); >+ assert_equals(wakeLock1, wakeLock2); >+}, "navigator.getWakeLock() for the same Document always return same WakeLock promise"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0615193bc580b88cf62be3042cb19fb7e6f0a2e5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test that wake lock state should be global promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..98cebe01c1126e0ebdc26784e15e9a057d1a03fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-state-is-global.https.html >@@ -0,0 +1,73 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>wake lock state should be global</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<body> >+<script id="iframe" type="text/plain"> >+let iframeWakeLock, iframeRequest; >+window.onmessage = async message => { >+ switch(message.data) { >+ case "ACQUIRED": >+ iframeWakeLock = await navigator.getWakeLock("screen"); >+ iframeRequest = iframeWakeLock.createRequest(); >+ parent.postMessage(iframeWakeLock.active, "*"); >+ break; >+ case "RELEASED": >+ iframeRequest.cancel(); >+ parent.postMessage(iframeWakeLock.active, "*"); >+ break; >+ default: >+ parent.postMessage("unknown operation", "*"); >+ } >+} >+</script> >+ >+<script> >+function load_iframe() { >+ return new Promise(resolve => { >+ const iframe = document.createElement("iframe"); >+ iframe.onload = () => { resolve(iframe); }; >+ iframe.srcdoc = "<script>" + >+ document.getElementById('iframe').textContent + >+ "<\/script>"; >+ document.body.appendChild(iframe); >+ }); >+} >+ >+function wait_for_message(iframe) { >+ return new Promise(resolve => { >+ self.addEventListener("message", function listener(e) { >+ if (e.source === iframe.contentWindow) { >+ resolve(e.data); >+ self.removeEventListener("message", listener); >+ } >+ }); >+ }); >+} >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ const iframe = await load_iframe(); >+ const eventWatcher = new EventWatcher(t, wakeLock, "activechange"); >+ >+ assert_false(wakeLock.active, "wakeLock is initially false"); >+ >+ //when iframe wake lock is acquired, parent wake lock should be actived >+ iframe.contentWindow.postMessage("ACQUIRED", "*"); >+ const isActive1 = await wait_for_message(iframe); >+ await eventWatcher.wait_for("activechange"); >+ assert_true(isActive1, "the iframe wake lock state is actived when iframe wake lock is acquired"); >+ assert_true(wakeLock.active, "the wake lock state is actived when iframe wake lock is acquired"); >+ >+ //when iframe wake lock is released, parent wake lock should be inactived >+ iframe.contentWindow.postMessage("RELEASED", "*"); >+ const isActive2 = await wait_for_message(iframe); >+ eventWatcher.wait_for("activechange"); >+ assert_false(isActive2, "the iframe wake lock state is inactived when iframe wake lock is released"); >+ assert_false(wakeLock.active, "the wake lock state is inactived when iframe wake lock is released"); >+}, "Test that wake lock state should be global"); >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a76f0b1d5350897f829da6e80435598851dcc7db >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https-expected.txt >@@ -0,0 +1,6 @@ >+ >+FAIL Test that wakeLock.type is 'screen' when screen wake lock is invoked promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+FAIL Test that wakeLock.type is 'system' when system wake lock is invoked promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("system")', 'navigator.getWakeLock' is undefined)" >+FAIL 'WakeLockTypeNotSupported' is thrown when set an empty wake lock type navigator.getWakeLock is not a function. (In 'navigator.getWakeLock()', 'navigator.getWakeLock' is undefined) >+FAIL 'WakeLockTypeNotSupported' is thrown when set an unsupported wake lock type navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("unsupported")', 'navigator.getWakeLock' is undefined) >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..70aa129abcc81ea187eeb3dd400dd70f6df11990 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelock-type.https.html >@@ -0,0 +1,28 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>WakeLockType Test</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+ >+<script> >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("screen"); >+ assert_equals(wakeLock.type, "screen"); >+}, "Test that wakeLock.type is 'screen' when screen wake lock is invoked"); >+ >+promise_test(async t => { >+ const wakeLock = await navigator.getWakeLock("system"); >+ assert_equals(wakeLock.type, "system"); >+}, "Test that wakeLock.type is 'system' when system wake lock is invoked"); >+ >+promise_test(t => { >+ return promise_rejects(t, new DOMException("", "WakeLockTypeNotSupported"), navigator.getWakeLock()); >+}, "'WakeLockTypeNotSupported' is thrown when set an empty wake lock type"); >+ >+promise_test(t => { >+ return promise_rejects(t, new DOMException("", "WakeLockTypeNotSupported"), navigator.getWakeLock("unsupported")); >+}, "'WakeLockTypeNotSupported' is thrown when set an unsupported wake lock type"); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..5474b2bc8120e781b3875237b7248a1901512806 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL Test that the WakeLockRequest object is independent. promise_test: Unhandled rejection with value: object "TypeError: navigator.getWakeLock is not a function. (In 'navigator.getWakeLock("screen")', 'navigator.getWakeLock' is undefined)" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https.html b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a113b004fe2a5dbcea8d11b1cedcca70841506bc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/wake-lock/wakelockrequest-is-independent.https.html >@@ -0,0 +1,15 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>WakeLockRequest object is independent</title> >+<link rel="help" href="https://w3c.github.io/wake-lock/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+promise_test(async t => { >+ const wakeLock1 = await navigator.getWakeLock("screen"); >+ const wakeLock2 = await navigator.getWakeLock("screen"); >+ const request1 = wakeLock1.createRequest(); >+ const request2 = wakeLock2.createRequest(); >+ assert_not_equals(request1, request2); >+}, "Test that the WakeLockRequest object is independent."); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt >index 43864038dd0645fddccf172f6b8a02aa34706d2a..537155887ecf8c94f125b3180c7c2d3c5291d598 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt >@@ -1,7 +1,7 @@ > >-FAIL Effect values reflect changes to font-size on element assert_equals: Effect value after updating font-size expected "300px" but got "150px" >-FAIL Effect values reflect changes to font-size on parent element assert_equals: Effect value after updating font-size on parent element expected "300px" but got "150px" >-PASS Effect values reflect changes to font-size when computed style is not immediately flushed >-FAIL Effect values reflect changes to font-size from reparenting assert_equals: Effect value after attaching to font-size:20px parent expected "300px" but got "150px" >-PASS Effect values reflect changes to target element >+FAIL Effect values reflect changes to font-size on element assert_equals: Effect value before updating font-size expected "150px" but got "0px" >+FAIL Effect values reflect changes to font-size on parent element assert_equals: Effect value before updating font-size on parent element expected "150px" but got "0px" >+FAIL Effect values reflect changes to font-size when computed style is not immediately flushed assert_equals: Effect value after updating font-size on parent element expected "300px" but got "0px" >+FAIL Effect values reflect changes to font-size from reparenting assert_equals: Effect value after attaching to font-size:10px parent expected "150px" but got "0px" >+FAIL Effect values reflect changes to target element assert_equals: Effect value before updating target element expected "150px" but got "0px" > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/js/helpers.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/js/helpers.js >index 650d25c2ad6601b343e4110b6543bb784e4706a2..fbbfc8e00444dce1440fdbe8e28e11c5b064ce3d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/js/helpers.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/js/helpers.js >@@ -5,7 +5,7 @@ > function trimEmptyElements(array) { > var start = 0; > var end = array.length; >- >+ > while (start < array.length) { > if (array[start] !== 0) { > break; >@@ -115,7 +115,7 @@ function compareBuffers(got, expected) { > * + skipOfflineContextTests: optional. when true, skips running tests on an offline > * context by circumventing testOnOfflineContext. > * >- * [0]: http://web-platform-tests.org/writing-tests/testharness-api.html#single-page-tests >+ * [0]: https://web-platform-tests.org/writing-tests/testharness-api.html#single-page-tests > */ > function runTest(name) > { >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audio-param.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audio-param.js >new file mode 100644 >index 0000000000000000000000000000000000000000..bc33fe8a21f5e7fcbe4e3d2d2a4c4c3b840d3072 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audio-param.js >@@ -0,0 +1,44 @@ >+// Define functions that implement the formulas for AudioParam automations. >+ >+// AudioParam linearRamp value at time t for a linear ramp between (t0, v0) and >+// (t1, v1). It is assumed that t0 <= t. Results are undefined otherwise. >+function audioParamLinearRamp(t, v0, t0, v1, t1) { >+ if (t >= t1) >+ return v1; >+ return (v0 + (v1 - v0) * (t - t0) / (t1 - t0)) >+} >+ >+// AudioParam exponentialRamp value at time t for an exponential ramp between >+// (t0, v0) and (t1, v1). It is assumed that t0 <= t. Results are undefined >+// otherwise. >+function audioParamExponentialRamp(t, v0, t0, v1, t1) { >+ if (t >= t1) >+ return v1; >+ return v0 * Math.pow(v1 / v0, (t - t0) / (t1 - t0)); >+} >+ >+// AudioParam setTarget value at time t for a setTarget curve starting at (t0, >+// v0) with a final value of vFainal and a time constant of timeConstant. It is >+// assumed that t0 <= t. Results are undefined otherwise. >+function audioParamSetTarget(t, v0, t0, vFinal, timeConstant) { >+ return vFinal + (v0 - vFinal) * Math.exp(-(t - t0) / timeConstant); >+} >+ >+// AudioParam setValueCurve value at time t for a setValueCurve starting at time >+// t0 with curve, curve, and duration duration. The sample rate is sampleRate. >+// It is assumed that t0 <= t. >+function audioParamSetValueCurve(t, curve, t0, duration) { >+ if (t > t0 + duration) >+ return curve[curve.length - 1]; >+ >+ let curvePointsPerSecond = (curve.length - 1) / duration; >+ >+ let virtualIndex = (t - t0) * curvePointsPerSecond; >+ let index = Math.floor(virtualIndex); >+ >+ let delta = virtualIndex - index; >+ >+ let c0 = curve[index]; >+ let c1 = curve[Math.min(index + 1, curve.length - 1)]; >+ return c0 + (c1 - c0) * delta; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audionodeoptions.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audionodeoptions.js >new file mode 100644 >index 0000000000000000000000000000000000000000..293e8e0d9c8370a4015f3eaf2cfc4d2eb90df011 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audionodeoptions.js >@@ -0,0 +1,251 @@ >+// Test that constructor for the node with name |nodeName| handles the >+// various possible values for channelCount, channelCountMode, and >+// channelInterpretation. >+ >+// The |should| parameter is the test function from new |Audit|. >+function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) { >+ if (expectedNodeOptions === undefined) >+ expectedNodeOptions = {}; >+ let node; >+ >+ // Test that we can set channelCount and that errors are thrown for >+ // invalid values >+ let testChannelCount = 17; >+ if (expectedNodeOptions.channelCount) { >+ testChannelCount = expectedNodeOptions.channelCount.value; >+ } >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, Object.assign({}, expectedNodeOptions.additionalOptions, { >+ channelCount: testChannelCount >+ })); >+ }, >+ 'new ' + nodeName + '(c, {channelCount: ' + testChannelCount + '}}') >+ .notThrow(); >+ should(node.channelCount, 'node.channelCount').beEqualTo(testChannelCount); >+ >+ if (expectedNodeOptions.channelCount && >+ expectedNodeOptions.channelCount.isFixed) { >+ // The channel count is fixed. Verify that we throw an error if >+ // we try to change it. Arbitrarily set the count to be one more >+ // than the expected value. >+ testChannelCount = expectedNodeOptions.channelCount.value + 1; >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelCount: testChannelCount})); >+ }, >+ 'new ' + nodeName + '(c, {channelCount: ' + testChannelCount + '}}') >+ .throw(expectedNodeOptions.channelCount.errorType || 'TypeError'); >+ } else { >+ // The channel count is not fixed. Try to set the count to invalid >+ // values and make sure an error is thrown. >+ let errorType = 'NotSupportedError'; >+ >+ [0, 99].forEach(testValue => { >+ should(() => { >+ node = new window[nodeName]( >+ context, Object.assign({}, expectedNodeOptions.additionalOptions, { >+ channelCount: testValue >+ })); >+ }, `new ${nodeName}(c, {channelCount: ${testValue}})`).throw(errorType); >+ }); >+ } >+ >+ // Test channelCountMode >+ let testChannelCountMode = 'max'; >+ if (expectedNodeOptions.channelCountMode) { >+ testChannelCountMode = expectedNodeOptions.channelCountMode.value; >+ } >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, Object.assign({}, expectedNodeOptions.additionalOptions, { >+ channelCountMode: testChannelCountMode >+ })); >+ }, >+ 'new ' + nodeName + '(c, {channelCountMode: "' + testChannelCountMode + >+ '"}') >+ .notThrow(); >+ should(node.channelCountMode, 'node.channelCountMode') >+ .beEqualTo(testChannelCountMode); >+ >+ if (expectedNodeOptions.channelCountMode && >+ expectedNodeOptions.channelCountMode.isFixed) { >+ // Channel count mode is fixed. Test setting to something else throws. >+ ['max', 'clamped-max', 'explicit'].forEach(testValue => { >+ if (testValue !== expectedNodeOptions.channelCountMode.value) { >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelCountMode: testValue})); >+ }, >+ `new ${nodeName}(c, {channelCountMode: "${testValue}"})`) >+ .throw(expectedNodeOptions.channelCountMode.errorType); >+ } >+ }); >+ } else { >+ // Mode is not fixed. Verify that we can set the mode to all valid >+ // values, and that we throw for invalid values. >+ >+ let testValues = ['max', 'clamped-max', 'explicit']; >+ >+ testValues.forEach(testValue => { >+ should(() => { >+ node = new window[nodeName]( >+ context, Object.assign({}, expectedNodeOptions.additionalOptions, { >+ channelCountMode: testValue >+ })); >+ }, `new ${nodeName}(c, {channelCountMode: "${testValue}"})`).notThrow(); >+ should( >+ node.channelCountMode, 'node.channelCountMode after valid setter') >+ .beEqualTo(testValue); >+ >+ }); >+ >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelCountMode: 'foobar'})); >+ }, >+ 'new ' + nodeName + '(c, {channelCountMode: "foobar"}') >+ .throw('TypeError'); >+ should(node.channelCountMode, 'node.channelCountMode after invalid setter') >+ .beEqualTo(testValues[testValues.length - 1]); >+ } >+ >+ // Test channelInterpretation >+ if (expectedNodeOptions.channelInterpretation && >+ expectedNodeOptions.channelInterpretation.isFixed) { >+ // The channel interpretation is fixed. Verify that we throw an >+ // error if we try to change it. >+ ['speakers', 'discrete'].forEach(testValue => { >+ if (testValue !== expectedNodeOptions.channelInterpretation.value) { >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionOptions, >+ {channelInterpretation: testValue})); >+ }, >+ `new ${nodeName}(c, {channelInterpretation: "${testValue}"})`) >+ .throw(expectedNodeOptions.channelInterpretation.errorType); >+ } >+ }); >+ } else { >+ // Channel interpretation is not fixed. Verify that we can set it >+ // to all possible values. >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelInterpretation: 'speakers'})); >+ }, >+ 'new ' + nodeName + '(c, {channelInterpretation: "speakers"})') >+ .notThrow(); >+ should(node.channelInterpretation, 'node.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelInterpretation: 'discrete'})); >+ }, >+ 'new ' + nodeName + '(c, {channelInterpretation: "discrete"})') >+ .notThrow(); >+ should(node.channelInterpretation, 'node.channelInterpretation') >+ .beEqualTo('discrete'); >+ >+ should( >+ () => { >+ node = new window[nodeName]( >+ context, >+ Object.assign( >+ {}, expectedNodeOptions.additionalOptions, >+ {channelInterpretation: 'foobar'})); >+ }, >+ 'new ' + nodeName + '(c, {channelInterpretation: "foobar"})') >+ .throw('TypeError'); >+ should( >+ node.channelInterpretation, >+ 'node.channelInterpretation after invalid setter') >+ .beEqualTo('discrete'); >+ } >+} >+ >+function initializeContext(should) { >+ let c; >+ should(() => { >+ c = new OfflineAudioContext(1, 1, 48000); >+ }, 'context = new OfflineAudioContext(...)').notThrow(); >+ >+ return c; >+} >+ >+function testInvalidConstructor(should, name, context) { >+ should(() => { >+ new window[name](); >+ }, 'new ' + name + '()').throw('TypeError'); >+ should(() => { >+ new window[name](1); >+ }, 'new ' + name + '(1)').throw('TypeError'); >+ should(() => { >+ new window[name](context, 42); >+ }, 'new ' + name + '(context, 42)').throw('TypeError'); >+} >+ >+function testDefaultConstructor(should, name, context, options) { >+ let node; >+ >+ let message = options.prefix + ' = new ' + name + '(context'; >+ if (options.constructorOptions) >+ message += ', ' + JSON.stringify(options.constructorOptions); >+ message += ')' >+ >+ should(() => { >+ node = new window[name](context, options.constructorOptions); >+ }, message).notThrow(); >+ >+ should(node instanceof window[name], options.prefix + ' instanceof ' + name) >+ .beEqualTo(true); >+ should(node.numberOfInputs, options.prefix + '.numberOfInputs') >+ .beEqualTo(options.numberOfInputs); >+ should(node.numberOfOutputs, options.prefix + '.numberOfOutputs') >+ .beEqualTo(options.numberOfOutputs); >+ should(node.channelCount, options.prefix + '.channelCount') >+ .beEqualTo(options.channelCount); >+ should(node.channelCountMode, options.prefix + '.channelCountMode') >+ .beEqualTo(options.channelCountMode); >+ should(node.channelInterpretation, options.prefix + '.channelInterpretation') >+ .beEqualTo(options.channelInterpretation); >+ >+ return node; >+} >+ >+function testDefaultAttributes(should, node, prefix, items) { >+ items.forEach((item) => { >+ let attr = node[item.name]; >+ if (attr instanceof AudioParam) { >+ should(attr.value, prefix + '.' + item.name + '.value') >+ .beEqualTo(item.value); >+ } else { >+ should(attr, prefix + '.' + item.name).beEqualTo(item.value); >+ } >+ }); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/biquad-testing.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/biquad-testing.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7a0b6e6c1f8a3d616620425731603f0b43c5ff84 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/biquad-testing.js >@@ -0,0 +1,171 @@ >+// Globals, to make testing and debugging easier. >+let context; >+let filter; >+let signal; >+let renderedBuffer; >+let renderedData; >+ >+let sampleRate = 44100.0; >+let pulseLengthFrames = .1 * sampleRate; >+ >+// Maximum allowed error for the test to succeed. Experimentally determined. >+let maxAllowedError = 5.9e-8; >+ >+// This must be large enough so that the filtered result is >+// essentially zero. See comments for createTestAndRun. >+let timeStep = .1; >+ >+// Maximum number of filters we can process (mostly for setting the >+// render length correctly.) >+let maxFilters = 5; >+ >+// How long to render. Must be long enough for all of the filters we >+// want to test. >+let renderLengthSeconds = timeStep * (maxFilters + 1); >+ >+let renderLengthSamples = Math.round(renderLengthSeconds * sampleRate); >+ >+// Number of filters that will be processed. >+let nFilters; >+ >+function createImpulseBuffer(context, length) { >+ let impulse = context.createBuffer(1, length, context.sampleRate); >+ let data = impulse.getChannelData(0); >+ for (let k = 1; k < data.length; ++k) { >+ data[k] = 0; >+ } >+ data[0] = 1; >+ >+ return impulse; >+} >+ >+ >+function createTestAndRun(context, filterType, testParameters) { >+ // To test the filters, we apply a signal (an impulse) to each of >+ // the specified filters, with each signal starting at a different >+ // time. The output of the filters is summed together at the >+ // output. Thus for filter k, the signal input to the filter >+ // starts at time k * timeStep. For this to work well, timeStep >+ // must be large enough for the output of each filter to have >+ // decayed to zero with timeStep seconds. That way the filter >+ // outputs don't interfere with each other. >+ >+ let filterParameters = testParameters.filterParameters; >+ nFilters = Math.min(filterParameters.length, maxFilters); >+ >+ signal = new Array(nFilters); >+ filter = new Array(nFilters); >+ >+ impulse = createImpulseBuffer(context, pulseLengthFrames); >+ >+ // Create all of the signal sources and filters that we need. >+ for (let k = 0; k < nFilters; ++k) { >+ signal[k] = context.createBufferSource(); >+ signal[k].buffer = impulse; >+ >+ filter[k] = context.createBiquadFilter(); >+ filter[k].type = filterType; >+ filter[k].frequency.value = >+ context.sampleRate / 2 * filterParameters[k].cutoff; >+ filter[k].detune.value = (filterParameters[k].detune === undefined) ? >+ 0 : >+ filterParameters[k].detune; >+ filter[k].Q.value = filterParameters[k].q; >+ filter[k].gain.value = filterParameters[k].gain; >+ >+ signal[k].connect(filter[k]); >+ filter[k].connect(context.destination); >+ >+ signal[k].start(timeStep * k); >+ } >+ >+ return context.startRendering().then(buffer => { >+ checkFilterResponse(buffer, filterType, testParameters); >+ }); >+} >+ >+function addSignal(dest, src, destOffset) { >+ // Add src to dest at the given dest offset. >+ for (let k = destOffset, j = 0; k < dest.length, j < src.length; ++k, ++j) { >+ dest[k] += src[j]; >+ } >+} >+ >+function generateReference(filterType, filterParameters) { >+ let result = new Array(renderLengthSamples); >+ let data = new Array(renderLengthSamples); >+ // Initialize the result array and data. >+ for (let k = 0; k < result.length; ++k) { >+ result[k] = 0; >+ data[k] = 0; >+ } >+ // Make data an impulse. >+ data[0] = 1; >+ >+ for (let k = 0; k < nFilters; ++k) { >+ // Filter an impulse >+ let detune = (filterParameters[k].detune === undefined) ? >+ 0 : >+ filterParameters[k].detune; >+ let frequency = filterParameters[k].cutoff * >+ Math.pow(2, detune / 1200); // Apply detune, converting from Cents. >+ >+ let filterCoef = createFilter( >+ filterType, frequency, filterParameters[k].q, filterParameters[k].gain); >+ let y = filterData(filterCoef, data, renderLengthSamples); >+ >+ // Accumulate this filtered data into the final output at the desired >+ // offset. >+ addSignal(result, y, timeToSampleFrame(timeStep * k, sampleRate)); >+ } >+ >+ return result; >+} >+ >+function checkFilterResponse(renderedBuffer, filterType, testParameters) { >+ let filterParameters = testParameters.filterParameters; >+ let maxAllowedError = testParameters.threshold; >+ let should = testParameters.should; >+ >+ renderedData = renderedBuffer.getChannelData(0); >+ >+ reference = generateReference(filterType, filterParameters); >+ >+ let len = Math.min(renderedData.length, reference.length); >+ >+ let success = true; >+ >+ // Maximum error between rendered data and expected data >+ let maxError = 0; >+ >+ // Sample offset where the maximum error occurred. >+ let maxPosition = 0; >+ >+ // Number of infinities or NaNs that occurred in the rendered data. >+ let invalidNumberCount = 0; >+ >+ should(nFilters, 'Number of filters tested') >+ .beEqualTo(filterParameters.length); >+ >+ // Compare the rendered signal with our reference, keeping >+ // track of the maximum difference (and the offset of the max >+ // difference.) Check for bad numbers in the rendered output >+ // too. There shouldn't be any. >+ for (let k = 0; k < len; ++k) { >+ let err = Math.abs(renderedData[k] - reference[k]); >+ if (err > maxError) { >+ maxError = err; >+ maxPosition = k; >+ } >+ if (!isValidNumber(renderedData[k])) { >+ ++invalidNumberCount; >+ } >+ } >+ >+ should( >+ invalidNumberCount, 'Number of non-finite values in the rendered output') >+ .beEqualTo(0); >+ >+ should(maxError, 'Max error in ' + filterTypeName[filterType] + ' response') >+ .beLessThanOrEqualTo(maxAllowedError); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mix-testing.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mix-testing.js >new file mode 100644 >index 0000000000000000000000000000000000000000..63c8e1aca61b27b405a2475d180dbd47e79c9501 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mix-testing.js >@@ -0,0 +1,23 @@ >+let toneLengthSeconds = 1; >+ >+// Create a buffer with multiple channels. >+// The signal frequency in each channel is the multiple of that in the first >+// channel. >+function createToneBuffer(context, frequency, duration, numberOfChannels) { >+ let sampleRate = context.sampleRate; >+ let sampleFrameLength = duration * sampleRate; >+ >+ let audioBuffer = >+ context.createBuffer(numberOfChannels, sampleFrameLength, sampleRate); >+ >+ let n = audioBuffer.length; >+ >+ for (let k = 0; k < numberOfChannels; ++k) { >+ let data = audioBuffer.getChannelData(k); >+ >+ for (let i = 0; i < n; ++i) >+ data[i] = Math.sin(frequency * (k + 1) * 2.0 * Math.PI * i / sampleRate); >+ } >+ >+ return audioBuffer; >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mixing-rules.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mixing-rules.js >new file mode 100644 >index 0000000000000000000000000000000000000000..e06a1468a3b8eea60c4f603b05bf474e8d6cbe9d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mixing-rules.js >@@ -0,0 +1,350 @@ >+// Utilities for mixing rule testing. >+// http://webaudio.github.io/web-audio-api/#channel-up-mixing-and-down-mixing >+ >+ >+/** >+ * Create an n-channel buffer, with all sample data zero except for a shifted >+ * impulse. The impulse position depends on the channel index. For example, for >+ * a 4-channel buffer: >+ * channel 0: 1 0 0 0 0 0 0 0 >+ * channel 1: 0 1 0 0 0 0 0 0 >+ * channel 2: 0 0 1 0 0 0 0 0 >+ * channel 3: 0 0 0 1 0 0 0 0 >+ * @param {AudioContext} context Associated AudioContext. >+ * @param {Number} numberOfChannels Number of channels of test buffer. >+ * @param {Number} frameLength Buffer length in frames. >+ * @return {AudioBuffer} >+ */ >+function createShiftedImpulseBuffer(context, numberOfChannels, frameLength) { >+ let shiftedImpulseBuffer = >+ context.createBuffer(numberOfChannels, frameLength, context.sampleRate); >+ for (let channel = 0; channel < numberOfChannels; ++channel) { >+ let data = shiftedImpulseBuffer.getChannelData(channel); >+ data[channel] = 1; >+ } >+ >+ return shiftedImpulseBuffer; >+} >+ >+/** >+ * Create a string that displays the content of AudioBuffer. >+ * @param {AudioBuffer} audioBuffer AudioBuffer object to stringify. >+ * @param {Number} frameLength Number of frames to be printed. >+ * @param {Number} frameOffset Starting frame position for printing. >+ * @return {String} >+ */ >+function stringifyBuffer(audioBuffer, frameLength, frameOffset) { >+ frameOffset = (frameOffset || 0); >+ >+ let stringifiedBuffer = ''; >+ for (let channel = 0; channel < audioBuffer.numberOfChannels; ++channel) { >+ let channelData = audioBuffer.getChannelData(channel); >+ for (let i = 0; i < frameLength; ++i) >+ stringifiedBuffer += channelData[i + frameOffset] + ' '; >+ stringifiedBuffer += '\n'; >+ } >+ >+ return stringifiedBuffer; >+} >+ >+/** >+ * Compute number of channels from the connection. >+ * http://webaudio.github.io/web-audio-api/#dfn-computednumberofchannels >+ * @param {String} connections A string specifies the connection. For >+ * example, the string "128" means 3 >+ * connections, having 1, 2, and 8 channels >+ * respectively. >+ * @param {Number} channelCount Channel count. >+ * @param {String} channelCountMode Channel count mode. >+ * @return {Number} Computed number of channels. >+ */ >+function computeNumberOfChannels(connections, channelCount, channelCountMode) { >+ if (channelCountMode == 'explicit') >+ return channelCount; >+ >+ // Must have at least one channel. >+ let computedNumberOfChannels = 1; >+ >+ // Compute "computedNumberOfChannels" based on all the connections. >+ for (let i = 0; i < connections.length; ++i) { >+ let connectionNumberOfChannels = parseInt(connections[i]); >+ computedNumberOfChannels = >+ Math.max(computedNumberOfChannels, connectionNumberOfChannels); >+ } >+ >+ if (channelCountMode == 'clamped-max') >+ computedNumberOfChannels = Math.min(computedNumberOfChannels, channelCount); >+ >+ return computedNumberOfChannels; >+} >+ >+/** >+ * Apply up/down-mixing (in-place summing) based on 'speaker' interpretation. >+ * @param {AudioBuffer} input Input audio buffer. >+ * @param {AudioBuffer} output Output audio buffer. >+ */ >+function speakersSum(input, output) { >+ if (input.length != output.length) { >+ throw '[mixing-rules.js] speakerSum(): buffer lengths mismatch (input: ' + >+ input.length + ', output: ' + output.length + ')'; >+ } >+ >+ if (input.numberOfChannels === output.numberOfChannels) { >+ for (let channel = 0; channel < output.numberOfChannels; ++channel) { >+ let inputChannel = input.getChannelData(channel); >+ let outputChannel = output.getChannelData(channel); >+ for (let i = 0; i < outputChannel.length; i++) >+ outputChannel[i] += inputChannel[i]; >+ } >+ } else if (input.numberOfChannels < output.numberOfChannels) { >+ processUpMix(input, output); >+ } else { >+ processDownMix(input, output); >+ } >+} >+ >+/** >+ * In-place summing to |output| based on 'discrete' channel interpretation. >+ * @param {AudioBuffer} input Input audio buffer. >+ * @param {AudioBuffer} output Output audio buffer. >+ */ >+function discreteSum(input, output) { >+ if (input.length != output.length) { >+ throw '[mixing-rules.js] speakerSum(): buffer lengths mismatch (input: ' + >+ input.length + ', output: ' + output.length + ')'; >+ } >+ >+ let numberOfChannels = >+ Math.min(input.numberOfChannels, output.numberOfChannels) >+ >+ for (let channel = 0; channel < numberOfChannels; ++channel) { >+ let inputChannel = input.getChannelData(channel); >+ let outputChannel = output.getChannelData(channel); >+ for (let i = 0; i < outputChannel.length; i++) >+ outputChannel[i] += inputChannel[i]; >+ } >+} >+ >+/** >+ * Perform up-mix by in-place summing to |output| buffer. >+ * @param {AudioBuffer} input Input audio buffer. >+ * @param {AudioBuffer} output Output audio buffer. >+ */ >+function processUpMix(input, output) { >+ let numberOfInputChannels = input.numberOfChannels; >+ let numberOfOutputChannels = output.numberOfChannels; >+ let i, length = output.length; >+ >+ // Up-mixing: 1 -> 2, 1 -> 4 >+ // output.L += input >+ // output.R += input >+ // output.SL += 0 (in the case of 1 -> 4) >+ // output.SR += 0 (in the case of 1 -> 4) >+ if ((numberOfInputChannels === 1 && numberOfOutputChannels === 2) || >+ (numberOfInputChannels === 1 && numberOfOutputChannels === 4)) { >+ let inputChannel = input.getChannelData(0); >+ let outputChannel0 = output.getChannelData(0); >+ let outputChannel1 = output.getChannelData(1); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += inputChannel[i]; >+ outputChannel1[i] += inputChannel[i]; >+ } >+ >+ return; >+ } >+ >+ // Up-mixing: 1 -> 5.1 >+ // output.L += 0 >+ // output.R += 0 >+ // output.C += input >+ // output.LFE += 0 >+ // output.SL += 0 >+ // output.SR += 0 >+ if (numberOfInputChannels == 1 && numberOfOutputChannels == 6) { >+ let inputChannel = input.getChannelData(0); >+ let outputChannel2 = output.getChannelData(2); >+ for (i = 0; i < length; i++) >+ outputChannel2[i] += inputChannel[i]; >+ >+ return; >+ } >+ >+ // Up-mixing: 2 -> 4, 2 -> 5.1 >+ // output.L += input.L >+ // output.R += input.R >+ // output.C += 0 (in the case of 2 -> 5.1) >+ // output.LFE += 0 (in the case of 2 -> 5.1) >+ // output.SL += 0 >+ // output.SR += 0 >+ if ((numberOfInputChannels === 2 && numberOfOutputChannels === 4) || >+ (numberOfInputChannels === 2 && numberOfOutputChannels === 6)) { >+ let inputChannel0 = input.getChannelData(0); >+ let inputChannel1 = input.getChannelData(1); >+ let outputChannel0 = output.getChannelData(0); >+ let outputChannel1 = output.getChannelData(1); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += inputChannel0[i]; >+ outputChannel1[i] += inputChannel1[i]; >+ } >+ >+ return; >+ } >+ >+ // Up-mixing: 4 -> 5.1 >+ // output.L += input.L >+ // output.R += input.R >+ // output.C += 0 >+ // output.LFE += 0 >+ // output.SL += input.SL >+ // output.SR += input.SR >+ if (numberOfInputChannels === 4 && numberOfOutputChannels === 6) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.SL >+ let inputChannel3 = input.getChannelData(3); // input.SR >+ let outputChannel0 = output.getChannelData(0); // output.L >+ let outputChannel1 = output.getChannelData(1); // output.R >+ let outputChannel4 = output.getChannelData(4); // output.SL >+ let outputChannel5 = output.getChannelData(5); // output.SR >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += inputChannel0[i]; >+ outputChannel1[i] += inputChannel1[i]; >+ outputChannel4[i] += inputChannel2[i]; >+ outputChannel5[i] += inputChannel3[i]; >+ } >+ >+ return; >+ } >+ >+ // All other cases, fall back to the discrete sum. >+ discreteSum(input, output); >+} >+ >+/** >+ * Perform down-mix by in-place summing to |output| buffer. >+ * @param {AudioBuffer} input Input audio buffer. >+ * @param {AudioBuffer} output Output audio buffer. >+ */ >+function processDownMix(input, output) { >+ let numberOfInputChannels = input.numberOfChannels; >+ let numberOfOutputChannels = output.numberOfChannels; >+ let i, length = output.length; >+ >+ // Down-mixing: 2 -> 1 >+ // output += 0.5 * (input.L + input.R) >+ if (numberOfInputChannels === 2 && numberOfOutputChannels === 1) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let outputChannel0 = output.getChannelData(0); >+ for (i = 0; i < length; i++) >+ outputChannel0[i] += 0.5 * (inputChannel0[i] + inputChannel1[i]); >+ >+ return; >+ } >+ >+ // Down-mixing: 4 -> 1 >+ // output += 0.25 * (input.L + input.R + input.SL + input.SR) >+ if (numberOfInputChannels === 4 && numberOfOutputChannels === 1) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.SL >+ let inputChannel3 = input.getChannelData(3); // input.SR >+ let outputChannel0 = output.getChannelData(0); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += 0.25 * >+ (inputChannel0[i] + inputChannel1[i] + inputChannel2[i] + >+ inputChannel3[i]); >+ } >+ >+ return; >+ } >+ >+ // Down-mixing: 5.1 -> 1 >+ // output += sqrt(1/2) * (input.L + input.R) + input.C >+ // + 0.5 * (input.SL + input.SR) >+ if (numberOfInputChannels === 6 && numberOfOutputChannels === 1) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.C >+ let inputChannel4 = input.getChannelData(4); // input.SL >+ let inputChannel5 = input.getChannelData(5); // input.SR >+ let outputChannel0 = output.getChannelData(0); >+ let scaleSqrtHalf = Math.sqrt(0.5); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += >+ scaleSqrtHalf * (inputChannel0[i] + inputChannel1[i]) + >+ inputChannel2[i] + 0.5 * (inputChannel4[i] + inputChannel5[i]); >+ } >+ >+ return; >+ } >+ >+ // Down-mixing: 4 -> 2 >+ // output.L += 0.5 * (input.L + input.SL) >+ // output.R += 0.5 * (input.R + input.SR) >+ if (numberOfInputChannels == 4 && numberOfOutputChannels == 2) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.SL >+ let inputChannel3 = input.getChannelData(3); // input.SR >+ let outputChannel0 = output.getChannelData(0); // output.L >+ let outputChannel1 = output.getChannelData(1); // output.R >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += 0.5 * (inputChannel0[i] + inputChannel2[i]); >+ outputChannel1[i] += 0.5 * (inputChannel1[i] + inputChannel3[i]); >+ } >+ >+ return; >+ } >+ >+ // Down-mixing: 5.1 -> 2 >+ // output.L += input.L + sqrt(1/2) * (input.C + input.SL) >+ // output.R += input.R + sqrt(1/2) * (input.C + input.SR) >+ if (numberOfInputChannels == 6 && numberOfOutputChannels == 2) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.C >+ let inputChannel4 = input.getChannelData(4); // input.SL >+ let inputChannel5 = input.getChannelData(5); // input.SR >+ let outputChannel0 = output.getChannelData(0); // output.L >+ let outputChannel1 = output.getChannelData(1); // output.R >+ let scaleSqrtHalf = Math.sqrt(0.5); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += inputChannel0[i] + >+ scaleSqrtHalf * (inputChannel2[i] + inputChannel4[i]); >+ outputChannel1[i] += inputChannel1[i] + >+ scaleSqrtHalf * (inputChannel2[i] + inputChannel5[i]); >+ } >+ >+ return; >+ } >+ >+ // Down-mixing: 5.1 -> 4 >+ // output.L += input.L + sqrt(1/2) * input.C >+ // output.R += input.R + sqrt(1/2) * input.C >+ // output.SL += input.SL >+ // output.SR += input.SR >+ if (numberOfInputChannels === 6 && numberOfOutputChannels === 4) { >+ let inputChannel0 = input.getChannelData(0); // input.L >+ let inputChannel1 = input.getChannelData(1); // input.R >+ let inputChannel2 = input.getChannelData(2); // input.C >+ let inputChannel4 = input.getChannelData(4); // input.SL >+ let inputChannel5 = input.getChannelData(5); // input.SR >+ let outputChannel0 = output.getChannelData(0); // output.L >+ let outputChannel1 = output.getChannelData(1); // output.R >+ let outputChannel2 = output.getChannelData(2); // output.SL >+ let outputChannel3 = output.getChannelData(3); // output.SR >+ let scaleSqrtHalf = Math.sqrt(0.5); >+ for (i = 0; i < length; i++) { >+ outputChannel0[i] += inputChannel0[i] + scaleSqrtHalf * inputChannel2[i]; >+ outputChannel1[i] += inputChannel1[i] + scaleSqrtHalf * inputChannel2[i]; >+ outputChannel2[i] += inputChannel4[i]; >+ outputChannel3[i] += inputChannel5[i]; >+ } >+ >+ return; >+ } >+ >+ // All other cases, fall back to the discrete sum. >+ discreteSum(input, output); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/w3c-import.log >index 3152710e145059ddb5150d6076b2bcbda0e63bb6..85a3e5204d5c6ad90b4453015b352dafa44a5d84 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/w3c-import.log >@@ -14,14 +14,19 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audio-param.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audionodeoptions.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audioparam-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audit-util.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/audit.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/biquad-filters.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/biquad-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/convolution-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/delay-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/distance-model-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/merger-testing.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mix-testing.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/mixing-rules.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/panner-formulas.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/panner-model-testing.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/resources/sin_440Hz_-6dBFS_1s.wav >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0127d3976e64eb597825f281160a5a482d509a32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new AnalyserNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new AnalyserNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new AnalyserNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new AnalyserNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof AnalyserNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2112edeeffcf5688357d98b5161e6c3ab2d761ad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html >@@ -0,0 +1,183 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: AnalyserNode >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'AnalyserNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'AnalyserNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 1, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'fftSize', value: 2048}, >+ {name: 'frequencyBinCount', value: 1024}, >+ {name: 'minDecibels', value: -100}, {name: 'maxDecibels', value: -30}, >+ {name: 'smoothingTimeConstant', value: 0.8} >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'AnalyserNode'); >+ task.done(); >+ }); >+ >+ audit.define('constructor with options', (task, should) => { >+ let options = { >+ fftSize: 32, >+ maxDecibels: 1, >+ minDecibels: -13, >+ // Choose a value that can be represented the same as a float and as a >+ // double. >+ smoothingTimeConstant: 0.125 >+ }; >+ >+ let node; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node1 = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(node instanceof AnalyserNode, 'node1 instanceof AnalyserNode') >+ .beEqualTo(true); >+ should(node.fftSize, 'node1.fftSize').beEqualTo(options.fftSize); >+ should(node.maxDecibels, 'node1.maxDecibels') >+ .beEqualTo(options.maxDecibels); >+ should(node.minDecibels, 'node1.minDecibels') >+ .beEqualTo(options.minDecibels); >+ should(node.smoothingTimeConstant, 'node1.smoothingTimeConstant') >+ .beEqualTo(options.smoothingTimeConstant); >+ >+ task.done(); >+ }); >+ >+ audit.define('construct invalid options', (task, should) => { >+ let node; >+ >+ should( >+ () => { >+ node = new AnalyserNode(context, {fftSize: 33}); >+ }, >+ 'node = new AnalyserNode(c, { fftSize: 33 })') >+ .throw('IndexSizeError'); >+ should( >+ () => { >+ node = new AnalyserNode(context, {maxDecibels: -500}); >+ }, >+ 'node = new AnalyserNode(c, { maxDecibels: -500 })') >+ .throw('IndexSizeError'); >+ should( >+ () => { >+ node = new AnalyserNode(context, {minDecibels: -10}); >+ }, >+ 'node = new AnalyserNode(c, { minDecibels: -10 })') >+ .throw('IndexSizeError'); >+ should( >+ () => { >+ node = new AnalyserNode(context, {smoothingTimeConstant: 2}); >+ }, >+ 'node = new AnalyserNode(c, { smoothingTimeConstant: 2 })') >+ .throw('IndexSizeError'); >+ should(function() { >+ node = new AnalyserNode(context, {frequencyBinCount: 33}); >+ }, 'node = new AnalyserNode(c, { frequencyBinCount: 33 })').notThrow(); >+ should(node.frequencyBinCount, 'node.frequencyBinCount') >+ .beEqualTo(1024); >+ >+ task.done(); >+ }); >+ >+ audit.define('setting min/max', (task, should) => { >+ let node; >+ >+ // Recall the default values of minDecibels and maxDecibels are -100, >+ // and -30, respectively. Setting both values in the constructor should >+ // not signal an error in any of the following cases. >+ let options = {minDecibels: -10, maxDecibels: 20}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ options = {maxDecibels: 20, minDecibels: -10}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ options = {minDecibels: -200, maxDecibels: -150}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ options = {maxDecibels: -150, minDecibels: -200}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ // But these should signal because minDecibel > maxDecibel >+ options = {maxDecibels: -150, minDecibels: -10}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .throw('IndexSizeError'); >+ >+ options = {minDecibels: -10, maxDecibels: -150}; >+ should( >+ () => { >+ node = new AnalyserNode(context, options); >+ }, >+ 'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')') >+ .throw('IndexSizeError'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..08e0598bcbbace87de240b7125f272912cc723c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic-expected.txt >@@ -0,0 +1,13 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Basic AnalyserNode test] >+PASS Number of inputs for AnalyserNode is equal to 1. >+PASS Number of outputs for AnalyserNode is equal to 1. >+PASS Default minDecibels value is equal to -100. >+PASS Default maxDecibels value is equal to -30. >+PASS Default smoothingTimeConstant value is equal to 0.8. >+PASS node.minDecibels = -50.333333333333336 is equal to -50.333333333333336. >+PASS node.maxDecibels = -40.333333333333336 is equal to -40.333333333333336. >+PASS < [Basic AnalyserNode test] All assertions passed. (total 7 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e176d6111e81fbff6ce75d63bec563bede61de6b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html >@@ -0,0 +1,57 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ realtimeanalyser-basic.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context = 0; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('Basic AnalyserNode test', function(task, should) { >+ context = new AudioContext(); >+ let analyser = context.createAnalyser(); >+ >+ should(analyser.numberOfInputs, 'Number of inputs for AnalyserNode') >+ .beEqualTo(1); >+ >+ should(analyser.numberOfOutputs, 'Number of outputs for AnalyserNode') >+ .beEqualTo(1); >+ >+ should(analyser.minDecibels, 'Default minDecibels value') >+ .beEqualTo(-100); >+ >+ should(analyser.maxDecibels, 'Default maxDecibels value') >+ .beEqualTo(-30); >+ >+ should( >+ analyser.smoothingTimeConstant, >+ 'Default smoothingTimeConstant value') >+ .beEqualTo(0.8); >+ >+ let expectedValue = -50 - (1 / 3); >+ analyser.minDecibels = expectedValue; >+ >+ should(analyser.minDecibels, 'node.minDecibels = ' + expectedValue) >+ .beEqualTo(expectedValue); >+ >+ expectedValue = -40 - (1 / 3); >+ analyser.maxDecibels = expectedValue; >+ >+ should(analyser.maxDecibels, 'node.maxDecibels = ' + expectedValue) >+ .beEqualTo(expectedValue); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..38e9aea61a67e667c922b76f59cb8e58c147d573 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 105: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [FFT scaling tests] Test Scaling of FFT in AnalyserNode >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6a0ab7d06eda5a67ca4262ea1ded49b03cc356b9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html >@@ -0,0 +1,113 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ realtimeanalyser-fft-scaling.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <div id="description"></div> >+ <div id="console"></div> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // The number of analysers. We have analysers from size for each of the >+ // possible sizes of 2^5 to 2^15 for a total of 11. >+ let numberOfAnalysers = 11; >+ let sampleRate = 44100; >+ let nyquistFrequency = sampleRate / 2; >+ >+ // Frequency of the sine wave test signal. Should be high enough so that >+ // we get at least one full cycle for the 32-point FFT. This should also >+ // be such that the frequency should be exactly in one of the FFT bins for >+ // each of the possible FFT sizes. >+ let oscFrequency = nyquistFrequency / 16; >+ >+ // The actual peak values from each analyser. Useful for examining the >+ // actual peak values. >+ let peakValue = new Array(numberOfAnalysers); >+ >+ // For a 0dBFS sine wave, we would expect the FFT magnitude to be 0dB as >+ // well, but the analyzer node applies a Blackman window (to smooth the >+ // estimate). This reduces the energy of the signal so the FFT peak is >+ // less than 0dB. The threshold value given here was determined >+ // experimentally. >+ // >+ // See https://code.google.com/p/chromium/issues/detail?id=341596. >+ let peakThreshold = [ >+ -14.43, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56, >+ -13.56, -13.56 >+ ]; >+ >+ function checkResult(order, analyser, should) { >+ return function() { >+ let index = order - 5; >+ let fftSize = 1 << order; >+ let fftData = new Float32Array(fftSize); >+ analyser.getFloatFrequencyData(fftData); >+ >+ // Compute the frequency bin that should contain the peak. >+ let expectedBin = >+ analyser.frequencyBinCount * (oscFrequency / nyquistFrequency); >+ >+ // Find the actual bin by finding the bin containing the peak. >+ let actualBin = 0; >+ peakValue[index] = -1000; >+ for (k = 0; k < analyser.frequencyBinCount; ++k) { >+ if (fftData[k] > peakValue[index]) { >+ actualBin = k; >+ peakValue[index] = fftData[k]; >+ } >+ } >+ >+ should(actualBin, (1 << order) + '-point FFT peak position') >+ .beEqualTo(expectedBin); >+ >+ should( >+ peakValue[index], (1 << order) + '-point FFT peak value in dBFS') >+ .beGreaterThanOrEqualTo(peakThreshold[index]); >+ } >+ } >+ >+ audit.define( >+ { >+ label: 'FFT scaling tests', >+ description: 'Test Scaling of FFT in AnalyserNode' >+ }, >+ function(task, should) { >+ let tests = []; >+ for (let k = 5; k <= 15; ++k) >+ tests.push(runTest(k, should)); >+ >+ // The order in which the tests finish is not important. >+ Promise.all(tests).then(task.done.bind(task)); >+ }); >+ >+ function runTest(order, should) { >+ let context = new OfflineAudioContext(1, 1 << order, sampleRate); >+ // Use a sine wave oscillator as the reference source signal. >+ let osc = context.createOscillator(); >+ osc.type = 'sine'; >+ osc.frequency.value = oscFrequency; >+ osc.connect(context.destination); >+ >+ let analyser = context.createAnalyser(); >+ // No smoothing to simplify the analysis of the result. >+ analyser.smoothingTimeConstant = 0; >+ analyser.fftSize = 1 << order; >+ osc.connect(analyser); >+ >+ osc.start(); >+ return context.startRendering().then(() => { >+ checkResult(order, analyser, should)(); >+ }); >+ } >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e8920bc03a0630ec5c1b1464e4696e66d6a5e24d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing-expected.txt >@@ -0,0 +1,43 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [FFT size test] Test that re-sizing the FFT arrays does not fail. >+PASS Setting fftSize to -1 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 0 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 1 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 2 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 3 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 4 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 5 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 8 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 9 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 16 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 17 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 32 did not throw an exception. >+PASS Setting fftSize to 33 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 64 did not throw an exception. >+PASS Setting fftSize to 65 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 128 did not throw an exception. >+PASS Setting fftSize to 129 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 256 did not throw an exception. >+PASS Setting fftSize to 257 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 512 did not throw an exception. >+PASS Setting fftSize to 513 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 1024 did not throw an exception. >+PASS Setting fftSize to 1025 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 2048 did not throw an exception. >+PASS Setting fftSize to 2049 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 4096 did not throw an exception. >+PASS Setting fftSize to 4097 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 8192 did not throw an exception. >+PASS Setting fftSize to 8193 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 16384 did not throw an exception. >+PASS Setting fftSize to 16385 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 32768 did not throw an exception. >+PASS Setting fftSize to 32769 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 65536 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 65537 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 131072 threw IndexSizeError: "The index is not in the allowed range.". >+PASS Setting fftSize to 131073 threw IndexSizeError: "The index is not in the allowed range.". >+PASS < [FFT size test] All assertions passed. (total 37 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b3de37f119f167469a4337d520345f820a6c4165 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html >@@ -0,0 +1,54 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ realtimeanalyser-fft-sizing.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ function doTest(fftSize, illegal, should) { >+ let c = new OfflineAudioContext(1, 1000, 44100); >+ let a = c.createAnalyser(); >+ let message = 'Setting fftSize to ' + fftSize; >+ let tester = function() { >+ a.fftSize = fftSize; >+ }; >+ >+ if (illegal) { >+ should(tester, message).throw('IndexSizeError'); >+ } else { >+ should(tester, message).notThrow(); >+ } >+ } >+ >+ audit.define( >+ { >+ label: 'FFT size test', >+ description: 'Test that re-sizing the FFT arrays does not fail.' >+ }, >+ function(task, should) { >+ doTest(-1, true, should); >+ doTest(0, true, should); >+ doTest(1, true, should); >+ for (let i = 2; i <= 0x20000; i *= 2) { >+ if (i >= 32 && i <= 32768) >+ doTest(i, false, should); >+ else >+ doTest(i, true, should); >+ doTest(i + 1, true, should); >+ } >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/w3c-import.log >index 33c72b7317498d3301ce173f0051621cd55b8132..ae0fec443be5e53fe99753cc6d40f061f9c5d518 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/w3c-import.log >@@ -14,6 +14,10 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-minimum.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/test-analyser-output.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3cced8341d7b5ba5cdf94a1ab4a991b5bdaa51b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel-expected.txt >@@ -0,0 +1,31 @@ >+CONSOLE MESSAGE: line 236: TypeError: buffer.copyFromChannel is not a function. (In 'buffer.copyFromChannel(dst8, c)', 'buffer.copyFromChannel' is undefined) >+ >+Harness Error (FAIL), message = TypeError: buffer.copyFromChannel is not a function. (In 'buffer.copyFromChannel(dst8, c)', 'buffer.copyFromChannel' is undefined) >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS Initialized values contains only the constant -1. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [copyFrom-exceptions] >+FAIL X AudioBuffer.prototype.copyFromChannel does not exist. Got undefined. assert_true: expected true got false >+PASS 0: buffer = context.createBuffer(3, 16, context.sampleRate) did not throw an exception. >+PASS 1: buffer.copyFromChannel(null, 0) threw TypeError: "buffer.copyFromChannel is not a function. (In 'buffer.copyFromChannel(null, 0)', 'buffer.copyFromChannel' is undefined)". >+PASS 2: buffer.copyFromChannel(context, 0) threw TypeError: "buffer.copyFromChannel is not a function. (In 'buffer.copyFromChannel(context, 0)', 'buffer.copyFromChannel' is undefined)". >+FAIL X 3: buffer.copyFromChannel(x, -1) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 4: buffer.copyFromChannel(x, 3) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 5: buffer.copyFromChannel(x, 0, -1) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 6: buffer.copyFromChannel(x, 0, 16) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 7: buffer.copyFromChannel(x, 3) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL < [copyFrom-exceptions] 6 out of 9 assertions were failed. assert_true: expected true got false >+PASS > [copyTo-exceptions] >+FAIL X AudioBuffer.prototype.copyToChannel does not exist. Got undefined. assert_true: expected true got false >+PASS 0: buffer.copyToChannel(null, 0) threw TypeError: "buffer.copyToChannel is not a function. (In 'buffer.copyToChannel(null, 0)', 'buffer.copyToChannel' is undefined)". >+PASS 1: buffer.copyToChannel(context, 0) threw TypeError: "buffer.copyToChannel is not a function. (In 'buffer.copyToChannel(context, 0)', 'buffer.copyToChannel' is undefined)". >+FAIL X 2: buffer.copyToChannel(x, -1) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 3: buffer.copyToChannel(x, 3) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 4: buffer.copyToChannel(x, 0, -1) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 5: buffer.copyToChannel(x, 0, 16) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X 6: buffer.copyToChannel(x, 3) threw "TypeError" instead of IndexSizeError. assert_true: expected true got false >+FAIL < [copyTo-exceptions] 6 out of 8 assertions were failed. assert_true: expected true got false >+PASS > [copyFrom-validate] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7d0af70df625ba7e2471091efe8d04e7e36f1165 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html >@@ -0,0 +1,331 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Basic Functionality of AudioBuffer.copyFromChannel and >+ AudioBuffer.copyToChannel >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ // Define utility routines. >+ >+ // Initialize the AudioBuffer |buffer| with a ramp signal on each channel. >+ // The ramp starts at channel number + 1. >+ function initializeAudioBufferRamp(buffer) { >+ for (let c = 0; c < buffer.numberOfChannels; ++c) { >+ let d = buffer.getChannelData(c); >+ for (let k = 0; k < d.length; ++k) { >+ d[k] = k + c + 1; >+ } >+ } >+ } >+ >+ // Create a Float32Array of length |length| and initialize the array to >+ // -1. >+ function createInitializedF32Array(length) { >+ let x = new Float32Array(length); >+ for (let k = 0; k < length; ++k) { >+ x[k] = -1; >+ } >+ return x; >+ } >+ >+ // Create a Float32Array of length |length| that is initialized to be a >+ // ramp starting at 1. >+ function createFloat32RampArray(length) { >+ let x = new Float32Array(length); >+ for (let k = 0; k < x.length; ++k) { >+ x[k] = k + 1; >+ } >+ >+ return x; >+ } >+ >+ // Test that the array |x| is a ramp starting at value |start| of length >+ // |length|, starting at |startIndex| in the array. |startIndex| is >+ // optional and defaults to 0. Any other values must be -1. >+ function shouldBeRamp( >+ should, testName, x, startValue, length, startIndex) { >+ let k; >+ let startingIndex = startIndex || 0; >+ let expected = Array(x.length); >+ >+ // Fill the expected array with the correct results. >+ >+ // The initial part (if any) must be -1. >+ for (k = 0; k < startingIndex; ++k) { >+ expected[k] = -1; >+ } >+ >+ // The second part should be a ramp starting with |startValue| >+ for (; k < startingIndex + length; ++k) { >+ expected[k] = startValue + k - startingIndex; >+ } >+ >+ // The last part (if any) should be -1. >+ for (; k < x.length; ++k) { >+ expected[k] = -1; >+ } >+ >+ should(x, testName, {numberOfArrayLog: 32}).beEqualToArray(expected); >+ } >+ >+ let audit = Audit.createTaskRunner(); >+ >+ let context = new AudioContext(); >+ // Temp array for testing exceptions for copyToChannel/copyFromChannel. >+ // The length is arbitrary. >+ let x = new Float32Array(8); >+ >+ // Number of frames in the AudioBuffer for testing. This is pretty >+ // arbitrary so choose a fairly small value. >+ let bufferLength = 16; >+ >+ // Number of channels in the AudioBuffer. Also arbitrary, but it should >+ // be greater than 1 for test coverage. >+ let numberOfChannels = 3; >+ >+ // AudioBuffer that will be used for testing copyFrom and copyTo. >+ let buffer = context.createBuffer( >+ numberOfChannels, bufferLength, context.sampleRate); >+ >+ let initialValues = Array(numberOfChannels); >+ >+ // Initialize things >+ audit.define('initialize', (task, should) => { >+ // Initialize to -1. >+ initialValues.fill(-1); >+ should(initialValues, 'Initialized values').beConstantValueOf(-1) >+ task.done(); >+ }); >+ >+ // Test that expected exceptions are signaled for copyFrom. >+ audit.define('copyFrom-exceptions', (task, should) => { >+ should( >+ AudioBuffer.prototype.copyFromChannel, >+ 'AudioBuffer.prototype.copyFromChannel') >+ .exist(); >+ >+ should( >+ () => { >+ buffer = context.createBuffer( >+ numberOfChannels, bufferLength, context.sampleRate); >+ }, >+ '0: buffer = context.createBuffer(' + numberOfChannels + ', ' + >+ bufferLength + ', context.sampleRate)') >+ .notThrow(); >+ should(() => { >+ buffer.copyFromChannel(null, 0); >+ }, '1: buffer.copyFromChannel(null, 0)').throw('TypeError'); >+ should(() => { >+ buffer.copyFromChannel(context, 0); >+ }, '2: buffer.copyFromChannel(context, 0)').throw('TypeError'); >+ should(() => { >+ buffer.copyFromChannel(x, -1); >+ }, '3: buffer.copyFromChannel(x, -1)').throw('IndexSizeError'); >+ should( >+ () => { >+ buffer.copyFromChannel(x, numberOfChannels); >+ }, >+ '4: buffer.copyFromChannel(x, ' + numberOfChannels + ')') >+ .throw('IndexSizeError'); >+ ; >+ should(() => { >+ buffer.copyFromChannel(x, 0, -1); >+ }, '5: buffer.copyFromChannel(x, 0, -1)').throw('IndexSizeError'); >+ should( >+ () => { >+ buffer.copyFromChannel(x, 0, bufferLength); >+ }, >+ '6: buffer.copyFromChannel(x, 0, ' + bufferLength + ')') >+ .throw('IndexSizeError'); >+ >+ should(() => { >+ buffer.copyFromChannel(x, 3); >+ }, '7: buffer.copyFromChannel(x, 3)').throw('IndexSizeError'); >+ >+ if (window.SharedArrayBuffer) { >+ let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); >+ should( >+ () => { >+ buffer.copyFromChannel(shared_buffer, 0); >+ }, >+ '8: buffer.copyFromChannel(SharedArrayBuffer view, 0)') >+ .throw('TypeError'); >+ >+ should( >+ () => { >+ buffer.copyFromChannel(shared_buffer, 0, 0); >+ }, >+ '9: buffer.copyFromChannel(SharedArrayBuffer view, 0, 0)') >+ .throw('TypeError'); >+ } >+ >+ task.done(); >+ }); >+ >+ // Test that expected exceptions are signaled for copyTo. >+ audit.define('copyTo-exceptions', (task, should) => { >+ should( >+ AudioBuffer.prototype.copyToChannel, >+ 'AudioBuffer.prototype.copyToChannel') >+ .exist(); >+ should(() => { >+ buffer.copyToChannel(null, 0); >+ }, '0: buffer.copyToChannel(null, 0)').throw('TypeError'); >+ should(() => { >+ buffer.copyToChannel(context, 0); >+ }, '1: buffer.copyToChannel(context, 0)').throw('TypeError'); >+ should(() => { >+ buffer.copyToChannel(x, -1); >+ }, '2: buffer.copyToChannel(x, -1)').throw('IndexSizeError'); >+ should( >+ () => { >+ buffer.copyToChannel(x, numberOfChannels); >+ }, >+ '3: buffer.copyToChannel(x, ' + numberOfChannels + ')') >+ .throw('IndexSizeError'); >+ should(() => { >+ buffer.copyToChannel(x, 0, -1); >+ }, '4: buffer.copyToChannel(x, 0, -1)').throw('IndexSizeError'); >+ should( >+ () => { >+ buffer.copyToChannel(x, 0, bufferLength); >+ }, >+ '5: buffer.copyToChannel(x, 0, ' + bufferLength + ')') >+ .throw('IndexSizeError'); >+ >+ should(() => { >+ buffer.copyToChannel(x, 3); >+ }, '6: buffer.copyToChannel(x, 3)').throw('IndexSizeError'); >+ >+ if (window.SharedArrayBuffer) { >+ let shared_buffer = new Float32Array(new SharedArrayBuffer(32)); >+ should( >+ () => { >+ buffer.copyToChannel(shared_buffer, 0); >+ }, >+ '7: buffer.copyToChannel(SharedArrayBuffer view, 0)') >+ .throw('TypeError'); >+ >+ should( >+ () => { >+ buffer.copyToChannel(shared_buffer, 0, 0); >+ }, >+ '8: buffer.copyToChannel(SharedArrayBuffer view, 0, 0)') >+ .throw('TypeError'); >+ } >+ >+ task.done(); >+ }); >+ >+ // Test copyFromChannel >+ audit.define('copyFrom-validate', (task, should) => { >+ // Initialize the AudioBuffer to a ramp for testing copyFrom. >+ initializeAudioBufferRamp(buffer); >+ >+ // Test copyFrom operation with a short destination array, filling the >+ // destination completely. >+ for (let c = 0; c < numberOfChannels; ++c) { >+ let dst8 = createInitializedF32Array(8); >+ buffer.copyFromChannel(dst8, c); >+ shouldBeRamp( >+ should, 'buffer.copyFromChannel(dst8, ' + c + ')', dst8, c + 1, 8) >+ } >+ >+ // Test copyFrom operation with a short destination array using a >+ // non-zero start index that still fills the destination completely. >+ for (let c = 0; c < numberOfChannels; ++c) { >+ let dst8 = createInitializedF32Array(8); >+ buffer.copyFromChannel(dst8, c, 1); >+ shouldBeRamp( >+ should, 'buffer.copyFromChannel(dst8, ' + c + ', 1)', dst8, c + 2, >+ 8) >+ } >+ >+ // Test copyFrom operation with a short destination array using a >+ // non-zero start index that does not fill the destinatiom completely. >+ // The extra elements should be unchanged. >+ for (let c = 0; c < numberOfChannels; ++c) { >+ let dst8 = createInitializedF32Array(8); >+ let startInChannel = bufferLength - 5; >+ buffer.copyFromChannel(dst8, c, startInChannel); >+ shouldBeRamp( >+ should, >+ 'buffer.copyFromChannel(dst8, ' + c + ', ' + startInChannel + ')', >+ dst8, c + 1 + startInChannel, bufferLength - startInChannel); >+ } >+ >+ // Copy operation with the destination longer than the buffer, leaving >+ // the trailing elements of the destination untouched. >+ for (let c = 0; c < numberOfChannels; ++c) { >+ let dst26 = createInitializedF32Array(bufferLength + 10); >+ buffer.copyFromChannel(dst26, c); >+ shouldBeRamp( >+ should, 'buffer.copyFromChannel(dst26, ' + c + ')', dst26, c + 1, >+ bufferLength); >+ } >+ >+ task.done(); >+ }); >+ >+ // Test copyTo >+ audit.define('copyTo-validate', (task, should) => { >+ // Create a source consisting of a ramp starting at 1, longer than the >+ // AudioBuffer >+ let src = createFloat32RampArray(bufferLength + 10); >+ >+ // Test copyTo with AudioBuffer shorter than Float32Array. The >+ // AudioBuffer should be completely filled with the Float32Array. >+ should( >+ () => { >+ buffer = >+ createConstantBuffer(context, bufferLength, initialValues); >+ }, >+ 'buffer = createConstantBuffer(context, ' + bufferLength + ', [' + >+ initialValues + '])') >+ .notThrow(); >+ >+ for (let c = 0; c < numberOfChannels; ++c) { >+ buffer.copyToChannel(src, c); >+ shouldBeRamp( >+ should, 'buffer.copyToChannel(src, ' + c + ')', >+ buffer.getChannelData(c), 1, bufferLength); >+ } >+ >+ // Test copyTo with AudioBuffer longer than the Float32Array. The tail >+ // of the AudioBuffer should be unchanged. >+ buffer = createConstantBuffer(context, bufferLength, initialValues); >+ let src10 = createFloat32RampArray(10); >+ for (let c = 0; c < numberOfChannels; ++c) { >+ buffer.copyToChannel(src10, c); >+ shouldBeRamp( >+ should, 'buffer.copyToChannel(src10, ' + c + ')', >+ buffer.getChannelData(c), 1, 10); >+ } >+ >+ // Test copyTo with non-default startInChannel. Part of the AudioBuffer >+ // should filled with the beginning and end sections untouched. >+ buffer = createConstantBuffer(context, bufferLength, initialValues); >+ for (let c = 0; c < numberOfChannels; ++c) { >+ let startInChannel = 5; >+ buffer.copyToChannel(src10, c, startInChannel); >+ >+ shouldBeRamp( >+ should, >+ 'buffer.copyToChannel(src10, ' + c + ', ' + startInChannel + ')', >+ buffer.getChannelData(c), 1, src10.length, startInChannel); >+ } >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e92717eccf64d86756da34c81a5fb7accfe352b4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-expected.txt >@@ -0,0 +1,17 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Basic tests for AudioBuffer] >+PASS buffer = context.createBuffer(4, 88200, 44100) is true. >+PASS buffer.sampleRate is equal to 44100. >+PASS buffer.length is equal to 88200. >+PASS buffer.duration is equal to 2. >+PASS buffer.numberOfChannels is equal to 4. >+PASS buffer.getChannelData(0) instanceof window.Float32Array is true. >+PASS buffer.getChannelData(1) instanceof window.Float32Array is true. >+PASS buffer.getChannelData(2) instanceof window.Float32Array is true. >+PASS buffer.getChannelData(3) instanceof window.Float32Array is true. >+FAIL X buffer.getChannelData(4) threw "SyntaxError" instead of IndexSizeError. assert_true: expected true got false >+FAIL X context.createBuffer(1, 1000, 24576).duration is not equal to 0.040690104166666664. Got 0.0406901054084301. assert_true: expected true got false >+FAIL < [Basic tests for AudioBuffer] 2 out of 11 assertions were failed. assert_true: expected true got false >+FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f213f32d227d499f1146ed590a847087f7977b69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData-expected.txt >@@ -0,0 +1,12 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [buffer-eq] >+FAIL X buffer.getChannelData(0) === buffer.getChannelData(0) is not equal to true. Got false. assert_true: expected true got false >+FAIL X buffer.getChannelData(1) === buffer.getChannelData(1) is not equal to true. Got false. assert_true: expected true got false >+FAIL < [buffer-eq] 2 out of 2 assertions were failed. assert_true: expected true got false >+PASS > [buffer-not-eq] >+PASS buffer1.getChannelData(0) === buffer2.getChannelData(0) is equal to false. >+PASS buffer1.getChannelData(1) === buffer2.getChannelData(1) is equal to false. >+PASS < [buffer-not-eq] All assertions passed. (total 2 assertions) >+FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html >new file mode 100644 >index 0000000000000000000000000000000000000000..612a91cf4ef60f6f1d441d27e2ab86f32b94f0fd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html >@@ -0,0 +1,66 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioBuffer.getChannelData() Returns the Same Object >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 48000; >+ let renderDuration = 0.5; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('buffer-eq', (task, should) => { >+ // Verify that successive calls to getChannelData return the same >+ // buffer. >+ let context = new AudioContext(); >+ let channelCount = 2; >+ let frameLength = 1000; >+ let buffer = >+ context.createBuffer(channelCount, frameLength, context.sampleRate); >+ >+ for (let c = 0; c < channelCount; ++c) { >+ let a = buffer.getChannelData(c); >+ let b = buffer.getChannelData(c); >+ >+ let message = 'buffer.getChannelData(' + c + ')'; >+ should(a === b, message + ' === ' + message).beEqualTo(true); >+ } >+ >+ task.done(); >+ }); >+ >+ audit.define('buffer-not-eq', (task, should) => { >+ let context = new AudioContext(); >+ let channelCount = 2; >+ let frameLength = 1000; >+ let buffer1 = >+ context.createBuffer(channelCount, frameLength, context.sampleRate); >+ let buffer2 = >+ context.createBuffer(channelCount, frameLength, context.sampleRate); >+ let success = true; >+ >+ for (let c = 0; c < channelCount; ++c) { >+ let a = buffer1.getChannelData(c); >+ let b = buffer2.getChannelData(c); >+ >+ let message = 'getChannelData(' + c + ')'; >+ should(a === b, 'buffer1.' + message + ' === buffer2.' + message) >+ .beEqualTo(false) && >+ success; >+ } >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html >new file mode 100644 >index 0000000000000000000000000000000000000000..07a34f07c185f4bc9dcf1b325bb51067610b430a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audiobuffer.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 44100.0 >+ let lengthInSeconds = 2; >+ let numberOfChannels = 4; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('Basic tests for AudioBuffer', function(task, should) { >+ let context = new AudioContext(); >+ let buffer = context.createBuffer( >+ numberOfChannels, sampleRate * lengthInSeconds, sampleRate); >+ >+ // Just for printing out a message describing what "buffer" is in the >+ // following tests. >+ should( >+ true, >+ 'buffer = context.createBuffer(' + numberOfChannels + ', ' + >+ (sampleRate * lengthInSeconds) + ', ' + sampleRate + ')') >+ .beTrue(); >+ >+ should(buffer.sampleRate, 'buffer.sampleRate').beEqualTo(sampleRate); >+ >+ should(buffer.length, 'buffer.length') >+ .beEqualTo(sampleRate * lengthInSeconds); >+ >+ should(buffer.duration, 'buffer.duration').beEqualTo(lengthInSeconds); >+ >+ should(buffer.numberOfChannels, 'buffer.numberOfChannels') >+ .beEqualTo(numberOfChannels); >+ >+ for (let index = 0; index < buffer.numberOfChannels; ++index) { >+ should( >+ buffer.getChannelData(index) instanceof window.Float32Array, >+ 'buffer.getChannelData(' + index + >+ ') instanceof window.Float32Array') >+ .beTrue(); >+ } >+ >+ should( >+ function() { >+ buffer.getChannelData(buffer.numberOfChannels); >+ }, >+ 'buffer.getChannelData(' + buffer.numberOfChannels + ')') >+ .throw('IndexSizeError'); >+ >+ let buffer2 = context.createBuffer(1, 1000, 24576); >+ let expectedDuration = 1000 / 24576; >+ >+ should( >+ buffer2.duration, 'context.createBuffer(1, 1000, 24576).duration') >+ .beEqualTo(expectedDuration); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..28e01b02852e4e0b2e50e5da295d0bb73f96edce >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer-expected.txt >@@ -0,0 +1,20 @@ >+CONSOLE MESSAGE: line 69: TypeError: undefined is not an object (evaluating 'buffer.numberOfChannels') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'buffer.numberOfChannels') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new AudioBuffer() threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer()')". >+PASS new AudioBuffer(1) threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer(1)')". >+PASS new AudioBuffer(Date, 42) threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer(Date, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [required options] >+PASS buffer = new AudioBuffer({}) threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer({})')". >+PASS buffer = new AudioBuffer({length: 1}) threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer({length: 1})')". >+PASS buffer = new AudioBuffer({sampleRate: 48000}) threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer({sampleRate: 48000})')". >+PASS buffer = new AudioBuffer({numberOfChannels: 1} threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer({numberOfChannels: 1})')". >+FAIL X buffer0 = new AudioBuffer({length: 21, sampleRate: 48000} incorrectly threw TypeError: "function is not a constructor (evaluating 'new AudioBuffer({length: 21, sampleRate: context.sampleRate})')". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html >new file mode 100644 >index 0000000000000000000000000000000000000000..f6032f29431b744905e7b33d8bdf65cadab328cf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html >@@ -0,0 +1,234 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: AudioBuffer >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ should(() => { >+ new AudioBuffer(); >+ }, 'new AudioBuffer()').throw('TypeError'); >+ should(() => { >+ new AudioBuffer(1); >+ }, 'new AudioBuffer(1)').throw('TypeError'); >+ should(() => { >+ new AudioBuffer(Date, 42); >+ }, 'new AudioBuffer(Date, 42)').throw('TypeError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('required options', (task, should) => { >+ let buffer; >+ >+ // The length and sampleRate attributes are required; all others are >+ // optional. >+ should(() => { >+ new AudioBuffer({}); >+ }, 'buffer = new AudioBuffer({})').throw('TypeError'); >+ >+ should(() => { >+ new AudioBuffer({length: 1}); >+ }, 'buffer = new AudioBuffer({length: 1})').throw('TypeError'); >+ >+ should(() => { >+ new AudioBuffer({sampleRate: 48000}); >+ }, 'buffer = new AudioBuffer({sampleRate: 48000})').throw('TypeError'); >+ >+ should(() => { >+ buffer = new AudioBuffer({numberOfChannels: 1}); >+ }, 'buffer = new AudioBuffer({numberOfChannels: 1}').throw('TypeError'); >+ >+ // Length and sampleRate are required, but others are optional. >+ should( >+ () => { >+ buffer = >+ new AudioBuffer({length: 21, sampleRate: context.sampleRate}); >+ }, >+ 'buffer0 = new AudioBuffer({length: 21, sampleRate: ' + >+ context.sampleRate + '}') >+ .notThrow(); >+ // Verify the buffer has the correct values. >+ should(buffer.numberOfChannels, 'buffer0.numberOfChannels') >+ .beEqualTo(1); >+ should(buffer.length, 'buffer0.length').beEqualTo(21); >+ should(buffer.sampleRate, 'buffer0.sampleRate') >+ .beEqualTo(context.sampleRate); >+ >+ should( >+ () => { >+ buffer = new AudioBuffer( >+ {numberOfChannels: 3, length: 1, sampleRate: 48000}); >+ }, >+ 'buffer1 = new AudioBuffer(' + >+ '{numberOfChannels: 3, length: 1, sampleRate: 48000})') >+ .notThrow(); >+ // Verify the buffer has the correct values. >+ should(buffer.numberOfChannels, 'buffer1.numberOfChannels') >+ .beEqualTo(3); >+ should(buffer.length, 'buffer1.length').beEqualTo(1); >+ should(buffer.sampleRate, 'buffer1.sampleRate').beEqualTo(48000); >+ >+ task.done(); >+ }); >+ >+ audit.define('invalid option values', (task, should) => { >+ let options = {numberOfChannels: 0, length: 1, sampleRate: 16000}; >+ should( >+ () => { >+ let buffer = new AudioBuffer(options); >+ }, >+ 'new AudioBuffer(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {numberOfChannels: 99, length: 0, sampleRate: 16000}; >+ should( >+ () => { >+ let buffer = new AudioBuffer(options); >+ }, >+ 'new AudioBuffer(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {numberOfChannels: 1, length: 0, sampleRate: 16000}; >+ should( >+ () => { >+ let buffer = new AudioBuffer(options); >+ }, >+ 'new AudioBuffer(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {numberOfChannels: 1, length: 1, sampleRate: 100}; >+ should( >+ () => { >+ let buffer = new AudioBuffer(options); >+ }, >+ 'new AudioBuffer(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let buffer; >+ >+ let options = {numberOfChannels: 5, length: 17, sampleRate: 16000}; >+ should( >+ () => { >+ buffer = new AudioBuffer(options); >+ }, >+ 'buffer = new AudioBuffer(' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(buffer.numberOfChannels, 'buffer.numberOfChannels') >+ .beEqualTo(options.numberOfChannels); >+ should(buffer.length, 'buffer.length').beEqualTo(options.length); >+ should(buffer.sampleRate, 'buffer.sampleRate').beEqualTo(16000); >+ >+ task.done(); >+ }); >+ >+ audit.define('valid constructor', (task, should) => { >+ let buffer; >+ >+ let options = {numberOfChannels: 3, length: 42, sampleRate: 54321}; >+ >+ let message = 'new AudioBuffer(' + JSON.stringify(options) + ')'; >+ should(() => { >+ buffer = new AudioBuffer(options); >+ }, message).notThrow(); >+ >+ should(buffer.numberOfChannels, 'buffer.numberOfChannels') >+ .beEqualTo(options.numberOfChannels); >+ >+ should(buffer.length, 'buffer.length').beEqualTo(options.length); >+ >+ should(buffer.sampleRate, 'buffer.sampleRate') >+ .beEqualTo(options.sampleRate); >+ >+ // Verify that we actually got the right number of channels >+ for (let k = 0; k < options.numberOfChannels; ++k) { >+ let data; >+ let message = 'buffer.getChannelData(' + k + ')'; >+ should(() => { >+ data = buffer.getChannelData(k); >+ }, message).notThrow(); >+ >+ should(data.length, message + ' length').beEqualTo(options.length); >+ } >+ >+ should( >+ () => { >+ buffer.getChannelData(options.numberOfChannels); >+ }, >+ 'buffer.getChannelData(' + options.numberOfChannels + ')') >+ .throw('IndexSizeError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('multiple contexts', (task, should) => { >+ // Test that an AudioBuffer can be used for different contexts. >+ let buffer = >+ new AudioBuffer({length: 128, sampleRate: context.sampleRate}); >+ >+ // Don't use getChannelData here because we want to be able to use >+ // |data| to compare the final results of playing out this buffer. (If >+ // we did, |data| gets detached when the sources play.) >+ let data = new Float32Array(buffer.length); >+ for (let k = 0; k < data.length; ++k) >+ data[k] = 1 + k; >+ buffer.copyToChannel(data, 0); >+ >+ let c1 = new OfflineAudioContext(1, 128, context.sampleRate); >+ let c2 = new OfflineAudioContext(1, 128, context.sampleRate); >+ >+ let s1 = new AudioBufferSourceNode(c1, {buffer: buffer}); >+ let s2 = new AudioBufferSourceNode(c2, {buffer: buffer}); >+ >+ s1.connect(c1.destination); >+ s2.connect(c2.destination); >+ >+ s1.start(); >+ s2.start(); >+ >+ Promise >+ .all([ >+ c1.startRendering().then(function(resultBuffer) { >+ return should(resultBuffer.getChannelData(0), 'c1 result') >+ .beEqualToArray(data); >+ }), >+ c2.startRendering().then(function(resultBuffer) { >+ return should(resultBuffer.getChannelData(0), 'c2 result') >+ .beEqualToArray(data); >+ }), >+ ]) >+ .then(returnValues => { >+ should( >+ returnValues[0] && returnValues[1], >+ 'AudioBuffer shared between two different contexts') >+ .message('correctly', 'incorrectly'); >+ task.done(); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/w3c-import.log >index 7a4f456e29c3e1ad932eba630e785ad4f2170888..4cfb04126bacf14388b8f3f4a04680f8e00aaa3c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/w3c-import.log >@@ -14,4 +14,8 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..09be433cf1018fa750d05632ba1c8cfdcef0793e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new AudioBufferSourceNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new AudioBufferSourceNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new AudioBufferSourceNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new AudioBufferSourceNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof AudioBufferSourceNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c1c3203451e62587b1aa864e85c63617c36c2a3d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html >@@ -0,0 +1,116 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: AudioBufferSource >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'AudioBufferSourceNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = >+ testDefaultConstructor(should, 'AudioBufferSourceNode', context, { >+ prefix: prefix, >+ numberOfInputs: 0, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'buffer', value: null}, >+ {name: 'detune', value: 0}, >+ {name: 'loop', value: false}, >+ {name: 'loopEnd', value: 0.0}, >+ {name: 'loopStart', value: 0.0}, >+ {name: 'playbackRate', value: 1.0}, >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define('nullable buffer', (task, should) => { >+ let node; >+ let options = {buffer: null}; >+ >+ should( >+ () => { >+ node = new AudioBufferSourceNode(context, options); >+ }, >+ 'node1 = new AudioBufferSourceNode(c, ' + JSON.stringify(options)) >+ .notThrow(); >+ >+ should(node.buffer, 'node1.buffer').beEqualTo(null); >+ >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ let buffer = context.createBuffer(2, 1000, context.sampleRate); >+ >+ let options = { >+ buffer: buffer, >+ detune: .5, >+ loop: true, >+ loopEnd: (buffer.length / 2) / context.sampleRate, >+ loopStart: 5 / context.sampleRate, >+ playbackRate: .75 >+ }; >+ >+ let message = 'node = new AudioBufferSourceNode(c, ' + >+ JSON.stringify(options) + ')'; >+ >+ should(() => { >+ node = new AudioBufferSourceNode(context, options); >+ }, message).notThrow(); >+ >+ // Use the factory method to create an equivalent node and compare the >+ // results from the constructor against this node. >+ let factoryNode = context.createBufferSource(); >+ factoryNode.buffer = options.buffer; >+ factoryNode.detune.value = options.detune; >+ factoryNode.loop = options.loop; >+ factoryNode.loopEnd = options.loopEnd; >+ factoryNode.loopStart = options.loopStart; >+ factoryNode.playbackRate.value = options.playbackRate; >+ >+ should(node.buffer === buffer, 'node2.buffer === buffer') >+ .beEqualTo(true); >+ should(node.detune.value, 'node2.detune.value') >+ .beEqualTo(factoryNode.detune.value); >+ should(node.loop, 'node2.loop').beEqualTo(factoryNode.loop); >+ should(node.loopEnd, 'node2.loopEnd').beEqualTo(factoryNode.loopEnd); >+ should(node.loopStart, 'node2.loopStart') >+ .beEqualTo(factoryNode.loopStart); >+ should(node.playbackRate.value, 'node2.playbackRate.value') >+ .beEqualTo(factoryNode.playbackRate.value); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..9509b7223c9b5d60ed16ed26be6e185430a28e18 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..c5e819cedc723664da0bd092ef78d1c15e894862 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 17: TypeError: context.getOutputTimestamp is not a function. (In 'context.getOutputTimestamp()', 'context.getOutputTimestamp' is undefined) >+ >+Harness Error (FAIL), message = TypeError: context.getOutputTimestamp is not a function. (In 'context.getOutputTimestamp()', 'context.getOutputTimestamp' is undefined) >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [getoutputtimestamp-initial-values] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cd09696e6890a251d34f2e6be379061a01f6ba25 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html >@@ -0,0 +1,32 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Testing AudioContext.getOutputTimestamp() method >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('getoutputtimestamp-initial-values', function(task, should) { >+ let context = new AudioContext; >+ let timestamp = context.getOutputTimestamp(); >+ >+ should(timestamp.contextTime, 'timestamp.contextTime').exist(); >+ should(timestamp.performanceTime, 'timestamp.performanceTime').exist(); >+ >+ should(timestamp.contextTime, 'timestamp.contextTime').beEqualTo(0); >+ should(timestamp.performanceTime, 'timestamp.performanceTime') >+ .beEqualTo(0); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9bb826e08265679e18da70b54be8e12db6a37e43 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume-expected.txt >@@ -0,0 +1,21 @@ >+CONSOLE MESSAGE: line 106: Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'p3.then') >+ >+Harness Error (FAIL), message = undefined is not an object (evaluating 'p3.then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test-suspend] Test suspend() for offline context >+PASS offlineContext = new OfflineAudioContext(1, 44100, 44100) did not throw an exception. >+PASS offlineContext.state is equal to suspended. >+PASS p1 = offlineContext.suspend() did not throw an exception. >+PASS p1 instanceof Promise is true. >+PASS p1 rejected correctly with InvalidStateError: The object is in an invalid state.. >+PASS < [test-suspend] All assertions passed. (total 5 assertions) >+PASS > [test-resume] Test resume() for offline context >+PASS p2 = offlineContext.resume() did not throw an exception. >+PASS p2 instanceof Promise is true. >+PASS After resume, offlineContext.state is equal to suspended. >+PASS p2 rejected correctly with InvalidStateError: The object is in an invalid state.. >+PASS < [test-resume] All assertions passed. (total 4 assertions) >+PASS > [test-after-close] Test state after context closed >+PASS p3 = offlineContext.startRendering() did not throw an exception. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html >new file mode 100644 >index 0000000000000000000000000000000000000000..48506d65ac9cf82e8e81841832193ac1f1f3cb56 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html >@@ -0,0 +1,145 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioContext.suspend() and AudioContext.resume() >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let offlineContext; >+ let osc; >+ let p1; >+ let p2; >+ let p3; >+ >+ let sampleRate = 44100; >+ let durationInSeconds = 1; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // Task: test suspend(). >+ audit.define( >+ { >+ label: 'test-suspend', >+ description: 'Test suspend() for offline context' >+ }, >+ function(task, should) { >+ // Test suspend/resume. Ideally this test is best with a online >+ // AudioContext, but content shell doesn't really have a working >+ // online AudioContext. Hence, use an OfflineAudioContext. Not all >+ // possible scenarios can be easily checked with an offline context >+ // instead of an online context. >+ >+ // Create an audio context with an oscillator. >+ should( >+ () => { >+ offlineContext = new OfflineAudioContext( >+ 1, durationInSeconds * sampleRate, sampleRate); >+ }, >+ 'offlineContext = new OfflineAudioContext(1, ' + >+ (durationInSeconds * sampleRate) + ', ' + sampleRate + ')') >+ .notThrow(); >+ osc = offlineContext.createOscillator(); >+ osc.connect(offlineContext.destination); >+ >+ // Verify the state. >+ should(offlineContext.state, 'offlineContext.state') >+ .beEqualTo('suspended'); >+ >+ // Multiple calls to suspend() should not be a problem. But we can't >+ // test that on an offline context. Thus, check that suspend() on >+ // an OfflineAudioContext rejects the promise. >+ should( >+ () => p1 = offlineContext.suspend(), >+ 'p1 = offlineContext.suspend()') >+ .notThrow(); >+ should(p1 instanceof Promise, 'p1 instanceof Promise').beTrue(); >+ >+ should(p1, 'p1').beRejected().then(task.done.bind(task)); >+ }); >+ >+ >+ // Task: test resume(). >+ audit.define( >+ { >+ label: 'test-resume', >+ description: 'Test resume() for offline context' >+ }, >+ function(task, should) { >+ // Multiple calls to resume should not be a problem. But we can't >+ // test that on an offline context. Thus, check that resume() on an >+ // OfflineAudioContext rejects the promise. >+ should( >+ () => p2 = offlineContext.resume(), >+ 'p2 = offlineContext.resume()') >+ .notThrow(); >+ should(p2 instanceof Promise, 'p2 instanceof Promise').beTrue(); >+ >+ // Resume doesn't actually resume an offline context >+ should(offlineContext.state, 'After resume, offlineContext.state') >+ .beEqualTo('suspended'); >+ should(p2, 'p2').beRejected().then(task.done.bind(task)); >+ }); >+ >+ // Task: test the state after context closed. >+ audit.define( >+ { >+ label: 'test-after-close', >+ description: 'Test state after context closed' >+ }, >+ function(task, should) { >+ // Render the offline context. >+ osc.start(); >+ >+ // Test suspend/resume in tested promise pattern. We don't care >+ // about the actual result of the offline rendering. >+ should( >+ () => p3 = offlineContext.startRendering(), >+ 'p3 = offlineContext.startRendering()') >+ .notThrow(); >+ >+ p3.then(() => { >+ should(offlineContext.state, 'After close, offlineContext.state') >+ .beEqualTo('closed'); >+ >+ // suspend() should be rejected on a closed context. >+ should(offlineContext.suspend(), 'offlineContext.suspend()') >+ .beRejected() >+ .then(() => { >+ // resume() should be rejected on closed context. >+ should(offlineContext.resume(), 'offlineContext.resume()') >+ .beRejected() >+ .then(task.done.bind(task)); >+ }) >+ }); >+ }); >+ >+ audit.define( >+ { >+ label: 'resume-running-context', >+ description: 'Test resuming a running context' >+ }, >+ (task, should) => { >+ let context; >+ should(() => context = new AudioContext(), 'Create online context') >+ .notThrow(); >+ >+ should(context.state, 'context.state').beEqualTo('running'); >+ should(context.resume(), 'context.resume') >+ .beResolved() >+ .then(() => { >+ should(context.state, 'context.state after resume') >+ .beEqualTo('running'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9f32c8a37264e831066a95883cdf2354ed126e47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions-expected.txt >@@ -0,0 +1,27 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test-audiocontextoptions-latencyHint-basic] Test creating contexts with basic latencyHint types. >+PASS context = new AudioContext() did not throw an exception. >+PASS context.sampleRate (48000 Hz) is greater than 0. >+FAIL X default baseLatency is not greater than 0. Got undefined. assert_true: expected true got false >+PASS context = new AudioContext({'latencyHint': 'interactive'}) did not throw an exception. >+PASS interactive baseLatency is equal to undefined. >+PASS context = new AudioContext({'latencyHint': 'balanced'}) did not throw an exception. >+FAIL X balanced baseLatency is not greater than or equal to undefined. Got undefined. assert_true: expected true got false >+PASS context = new AudioContext({'latencyHint': 'playback'}) did not throw an exception. >+FAIL X playback baseLatency is not greater than or equal to undefined. Got undefined. assert_true: expected true got false >+FAIL < [test-audiocontextoptions-latencyHint-basic] 3 out of 9 assertions were failed. assert_true: expected true got false >+PASS > [test-audiocontextoptions-latencyHint-double] Test creating contexts with explicit latencyHint values. >+PASS context = new AudioContext({'latencyHint': interactiveLatency/2}) did not throw an exception. >+FAIL X double-constructor baseLatency small is not less than or equal to undefined. Got undefined. assert_true: expected true got false >+PASS context = new AudioContext({'latencyHint': validLatency}) did not throw an exception. >+FAIL X double-constructor baseLatency inrange 1 is not greater than or equal to undefined. Got undefined. assert_true: expected true got false >+FAIL X double-constructor baseLatency inrange 2 is not less than or equal to undefined. Got undefined. assert_true: expected true got false >+PASS creating two high latency contexts did not throw an exception. >+PASS high latency context baseLatency is equal to undefined. >+FAIL X high latency context baseLatency is not greater than undefined. Got undefined. assert_true: expected true got false >+FAIL X context = new AudioContext({'latencyHint': 'foo'}) did not throw an exception. assert_true: expected true got false >+FAIL X context = new AudioContext('latencyHint') did not throw an exception. assert_true: expected true got false >+FAIL < [test-audiocontextoptions-latencyHint-double] 6 out of 10 assertions were failed. assert_true: expected true got false >+FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html >new file mode 100644 >index 0000000000000000000000000000000000000000..295cd5a5db1183a1ab7968adbc7922de9db158d1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html >@@ -0,0 +1,162 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioContextOptions >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ let defaultLatency; >+ let interactiveLatency; >+ let balancedLatency; >+ let playbackLatency; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ { >+ label: 'test-audiocontextoptions-latencyHint-basic', >+ description: 'Test creating contexts with basic latencyHint types.' >+ }, >+ function(task, should) { >+ let closingPromises = []; >+ >+ // Verify that an AudioContext can be created with default options. >+ should(function() { >+ context = new AudioContext() >+ }, 'context = new AudioContext()').notThrow(); >+ >+ should(context.sampleRate, >+ `context.sampleRate (${context.sampleRate} Hz)`).beGreaterThan(0); >+ >+ defaultLatency = context.baseLatency; >+ should(defaultLatency, 'default baseLatency').beGreaterThan(0); >+ >+ // Verify that an AudioContext can be created with the expected >+ // latency types. >+ should( >+ function() { >+ context = new AudioContext({'latencyHint': 'interactive'}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': \'interactive\'})') >+ .notThrow(); >+ >+ interactiveLatency = context.baseLatency; >+ should(interactiveLatency, 'interactive baseLatency') >+ .beEqualTo(defaultLatency); >+ closingPromises.push(context.close()); >+ >+ should( >+ function() { >+ context = new AudioContext({'latencyHint': 'balanced'}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': \'balanced\'})') >+ .notThrow(); >+ >+ balancedLatency = context.baseLatency; >+ should(balancedLatency, 'balanced baseLatency') >+ .beGreaterThanOrEqualTo(interactiveLatency); >+ closingPromises.push(context.close()); >+ >+ should( >+ function() { >+ context = new AudioContext({'latencyHint': 'playback'}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': \'playback\'})') >+ .notThrow(); >+ >+ playbackLatency = context.baseLatency; >+ should(playbackLatency, 'playback baseLatency') >+ .beGreaterThanOrEqualTo(balancedLatency); >+ closingPromises.push(context.close()); >+ >+ Promise.all(closingPromises).then(function() { >+ task.done(); >+ }); >+ }); >+ >+ audit.define( >+ { >+ label: 'test-audiocontextoptions-latencyHint-double', >+ description: >+ 'Test creating contexts with explicit latencyHint values.' >+ }, >+ function(task, should) { >+ let closingPromises = []; >+ >+ // Verify too small exact latency clamped to 'interactive' >+ should( >+ function() { >+ context = >+ new AudioContext({'latencyHint': interactiveLatency / 2}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': ' + >+ 'interactiveLatency/2})') >+ .notThrow(); >+ should(context.baseLatency, 'double-constructor baseLatency small') >+ .beLessThanOrEqualTo(interactiveLatency); >+ closingPromises.push(context.close()); >+ >+ // Verify that exact latency in range works as expected >+ let validLatency = (interactiveLatency + playbackLatency) / 2; >+ should( >+ function() { >+ context = new AudioContext({'latencyHint': validLatency}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': validLatency})') >+ .notThrow(); >+ should( >+ context.baseLatency, 'double-constructor baseLatency inrange 1') >+ .beGreaterThanOrEqualTo(interactiveLatency); >+ should( >+ context.baseLatency, 'double-constructor baseLatency inrange 2') >+ .beLessThanOrEqualTo(playbackLatency); >+ closingPromises.push(context.close()); >+ >+ // Verify too big exact latency clamped to some value >+ let context1; >+ let context2; >+ should(function() { >+ context1 = >+ new AudioContext({'latencyHint': playbackLatency * 10}); >+ context2 = >+ new AudioContext({'latencyHint': playbackLatency * 20}); >+ }, 'creating two high latency contexts').notThrow(); >+ should(context1.baseLatency, 'high latency context baseLatency') >+ .beEqualTo(context2.baseLatency); >+ should(context1.baseLatency, 'high latency context baseLatency') >+ .beGreaterThan(interactiveLatency); >+ closingPromises.push(context1.close()); >+ closingPromises.push(context2.close()); >+ >+ // Verify that invalid latencyHint values are rejected. >+ should( >+ function() { >+ context = new AudioContext({'latencyHint': 'foo'}) >+ }, >+ 'context = new AudioContext({\'latencyHint\': \'foo\'})') >+ .throw('TypeError'); >+ >+ // Verify that no extra options can be passed into the >+ // AudioContextOptions. >+ should( >+ function() { >+ context = new AudioContext('latencyHint') >+ }, >+ 'context = new AudioContext(\'latencyHint\')') >+ .throw('TypeError'); >+ >+ Promise.all(closingPromises).then(function() { >+ task.done(); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..20dafbdc483bc8e743c427b236c49282595ae781 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-getoutputtimestamp.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-suspend-resume.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..55cccda8a9bbd5cde55ad46e2ced6f9cec2e0b4f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 267: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Channel mixing rules for AudioNodes >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a1c3273cc3fef597eff30e13c6074bd99ddb7acf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html >@@ -0,0 +1,277 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode-channel-rules.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/mixing-rules.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ let context = 0; >+ let sampleRate = 44100; >+ let renderNumberOfChannels = 8; >+ let singleTestFrameLength = 8; >+ let testBuffers; >+ >+ // A list of connections to an AudioNode input, each of which is to be >+ // used in one or more specific test cases. Each element in the list is a >+ // string, with the number of connections corresponding to the length of >+ // the string, and each character in the string is from '1' to '8' >+ // representing a 1 to 8 channel connection (from an AudioNode output). >+ >+ // For example, the string "128" means 3 connections, having 1, 2, and 8 >+ // channels respectively. >+ >+ let connectionsList = [ >+ '1', '2', '3', '4', '5', '6', '7', '8', '11', '12', '14', '18', '111', >+ '122', '123', '124', '128' >+ ]; >+ >+ // A list of mixing rules, each of which will be tested against all of the >+ // connections in connectionsList. >+ let mixingRulesList = [ >+ { >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }, >+ { >+ channelCount: 4, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'speakers' >+ }, >+ >+ // Test up-down-mix to some explicit speaker layouts. >+ { >+ channelCount: 1, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'speakers' >+ }, >+ { >+ channelCount: 2, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'speakers' >+ }, >+ { >+ channelCount: 4, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'speakers' >+ }, >+ { >+ channelCount: 6, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'speakers' >+ }, >+ >+ { >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'discrete' >+ }, >+ { >+ channelCount: 4, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'discrete' >+ }, >+ { >+ channelCount: 4, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'discrete' >+ }, >+ { >+ channelCount: 8, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'discrete' >+ }, >+ ]; >+ >+ let numberOfTests = mixingRulesList.length * connectionsList.length; >+ >+ // Print out the information for an individual test case. >+ function printTestInformation( >+ testNumber, actualBuffer, expectedBuffer, frameLength, frameOffset) { >+ let actual = stringifyBuffer(actualBuffer, frameLength); >+ let expected = >+ stringifyBuffer(expectedBuffer, frameLength, frameOffset); >+ debug('TEST CASE #' + testNumber + '\n'); >+ debug('actual channels:\n' + actual); >+ debug('expected channels:\n' + expected); >+ } >+ >+ function scheduleTest( >+ testNumber, connections, channelCount, channelCountMode, >+ channelInterpretation) { >+ let mixNode = context.createGain(); >+ mixNode.channelCount = channelCount; >+ mixNode.channelCountMode = channelCountMode; >+ mixNode.channelInterpretation = channelInterpretation; >+ mixNode.connect(context.destination); >+ >+ for (let i = 0; i < connections.length; ++i) { >+ let connectionNumberOfChannels = >+ connections.charCodeAt(i) - '0'.charCodeAt(0); >+ >+ let source = context.createBufferSource(); >+ // Get a buffer with the right number of channels, converting from >+ // 1-based to 0-based index. >+ let buffer = testBuffers[connectionNumberOfChannels - 1]; >+ source.buffer = buffer; >+ source.connect(mixNode); >+ >+ // Start at the right offset. >+ let sampleFrameOffset = testNumber * singleTestFrameLength; >+ let time = sampleFrameOffset / sampleRate; >+ source.start(time); >+ } >+ } >+ >+ function checkTestResult( >+ renderedBuffer, testNumber, connections, channelCount, >+ channelCountMode, channelInterpretation, should) { >+ let s = 'connections: ' + connections + ', ' + channelCountMode; >+ >+ // channelCount is ignored in "max" mode. >+ if (channelCountMode == 'clamped-max' || >+ channelCountMode == 'explicit') { >+ s += '(' + channelCount + ')'; >+ } >+ >+ s += ', ' + channelInterpretation; >+ >+ let computedNumberOfChannels = computeNumberOfChannels( >+ connections, channelCount, channelCountMode); >+ >+ // Create a zero-initialized silent AudioBuffer with >+ // computedNumberOfChannels. >+ let destBuffer = context.createBuffer( >+ computedNumberOfChannels, singleTestFrameLength, >+ context.sampleRate); >+ >+ // Mix all of the connections into the destination buffer. >+ for (let i = 0; i < connections.length; ++i) { >+ let connectionNumberOfChannels = >+ connections.charCodeAt(i) - '0'.charCodeAt(0); >+ let sourceBuffer = >+ testBuffers[connectionNumberOfChannels - 1]; // convert from >+ // 1-based to >+ // 0-based index >+ >+ if (channelInterpretation == 'speakers') { >+ speakersSum(sourceBuffer, destBuffer); >+ } else if (channelInterpretation == 'discrete') { >+ discreteSum(sourceBuffer, destBuffer); >+ } else { >+ alert('Invalid channel interpretation!'); >+ } >+ } >+ >+ // Use this when debugging mixing rules. >+ // printTestInformation(testNumber, renderedBuffer, destBuffer, >+ // singleTestFrameLength, sampleFrameOffset); >+ >+ // Validate that destBuffer matches the rendered output. We need to >+ // check the rendered output at a specific sample-frame-offset >+ // corresponding to the specific test case we're checking for based on >+ // testNumber. >+ >+ let sampleFrameOffset = testNumber * singleTestFrameLength; >+ for (let c = 0; c < renderNumberOfChannels; ++c) { >+ let renderedData = renderedBuffer.getChannelData(c); >+ for (let frame = 0; frame < singleTestFrameLength; ++frame) { >+ let renderedValue = renderedData[frame + sampleFrameOffset]; >+ >+ let expectedValue = 0; >+ if (c < destBuffer.numberOfChannels) { >+ let expectedData = destBuffer.getChannelData(c); >+ expectedValue = expectedData[frame]; >+ } >+ >+ // We may need to add an epsilon in the comparison if we add more >+ // test vectors. >+ if (renderedValue != expectedValue) { >+ let message = s + 'rendered: ' + renderedValue + >+ ' expected: ' + expectedValue + ' channel: ' + c + >+ ' frame: ' + frame; >+ // testFailed(s); >+ should(renderedValue, s).beEqualTo(expectedValue); >+ return; >+ } >+ } >+ } >+ >+ should(true, s).beTrue(); >+ } >+ >+ function checkResult(buffer, should) { >+ // Sanity check result. >+ should(buffer.length, 'Rendered number of frames') >+ .beEqualTo(numberOfTests * singleTestFrameLength); >+ should(buffer.numberOfChannels, 'Rendered number of channels') >+ .beEqualTo(renderNumberOfChannels); >+ >+ // Check all the tests. >+ let testNumber = 0; >+ for (let m = 0; m < mixingRulesList.length; ++m) { >+ let mixingRules = mixingRulesList[m]; >+ for (let i = 0; i < connectionsList.length; ++i, ++testNumber) { >+ checkTestResult( >+ buffer, testNumber, connectionsList[i], >+ mixingRules.channelCount, mixingRules.channelCountMode, >+ mixingRules.channelInterpretation, should); >+ } >+ } >+ } >+ >+ audit.define( >+ {label: 'test', description: 'Channel mixing rules for AudioNodes'}, >+ function(task, should) { >+ >+ // Create 8-channel offline audio context. Each test will render 8 >+ // sample-frames starting at sample-frame position testNumber * 8. >+ let totalFrameLength = numberOfTests * singleTestFrameLength; >+ context = new OfflineAudioContext( >+ renderNumberOfChannels, totalFrameLength, sampleRate); >+ >+ // Set destination to discrete mixing. >+ context.destination.channelCount = renderNumberOfChannels; >+ context.destination.channelCountMode = 'explicit'; >+ context.destination.channelInterpretation = 'discrete'; >+ >+ // Create test buffers from 1 to 8 channels. >+ testBuffers = new Array(); >+ for (let i = 0; i < renderNumberOfChannels; ++i) { >+ testBuffers[i] = createShiftedImpulseBuffer( >+ context, i + 1, singleTestFrameLength); >+ } >+ >+ // Schedule all the tests. >+ let testNumber = 0; >+ for (let m = 0; m < mixingRulesList.length; ++m) { >+ let mixingRules = mixingRulesList[m]; >+ for (let i = 0; i < connectionsList.length; ++i, ++testNumber) { >+ scheduleTest( >+ testNumber, connectionsList[i], mixingRules.channelCount, >+ mixingRules.channelCountMode, >+ mixingRules.channelInterpretation); >+ } >+ } >+ >+ // Render then check results. >+ // context.oncomplete = checkResult; >+ context.startRendering().then(buffer => { >+ checkResult(buffer, should); >+ task.done(); >+ }); >+ ; >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4bdb7c754dd7ae2d3f7365e1fca3f7784edc5e78 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 30: TypeError: undefined is not an object (evaluating 'config.returned.constructor') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'config.returned.constructor') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [from-dictionary] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0a8c73160e543d6f9d382b536e5c41f7d29c6e9a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html >@@ -0,0 +1,164 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode-connect-method-chaining.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ // AudioNode dictionary with associated arguments. >+ let nodeDictionary = [ >+ {name: 'Analyser'}, {name: 'BiquadFilter'}, {name: 'BufferSource'}, >+ {name: 'ChannelMerger', args: [6]}, >+ {name: 'ChannelSplitter', args: [6]}, {name: 'Convolver'}, >+ {name: 'Delay', args: []}, {name: 'DynamicsCompressor'}, {name: 'Gain'}, >+ {name: 'Oscillator'}, {name: 'Panner'}, >+ {name: 'ScriptProcessor', args: [512, 1, 1]}, {name: 'StereoPanner'}, >+ {name: 'WaveShaper'} >+ ]; >+ >+ >+ function verifyReturnedNode(should, config) { >+ should( >+ config.destination === config.returned, >+ 'The return value of ' + config.desc + ' matches the destination ' + >+ config.returned.constructor.name) >+ .beEqualTo(true); >+ } >+ >+ // Test utility for batch method checking: in order to test 3 method >+ // signatures, so we create 3 dummy destinations. >+ // 1) .connect(GainNode) >+ // 2) .connect(BiquadFilterNode, output) >+ // 3) .connect(ChannelMergerNode, output, input) >+ function testConnectMethod(context, should, options) { >+ let source = >+ context['create' + options.name].apply(context, options.args); >+ let sourceName = source.constructor.name; >+ >+ let destination1 = context.createGain(); >+ verifyReturnedNode(should, { >+ source: source, >+ destination: destination1, >+ returned: source.connect(destination1), >+ desc: sourceName + '.connect(' + destination1.constructor.name + ')' >+ }); >+ >+ let destination2 = context.createBiquadFilter(); >+ verifyReturnedNode(should, { >+ source: source, >+ destination: destination2, >+ returned: source.connect(destination2, 0), >+ desc: >+ sourceName + '.connect(' + destination2.constructor.name + ', 0)' >+ }); >+ >+ let destination3 = context.createChannelMerger(); >+ verifyReturnedNode(should, { >+ source: source, >+ destination: destination3, >+ returned: source.connect(destination3, 0, 1), >+ desc: sourceName + '.connect(' + destination3.constructor.name + >+ ', 0, 1)' >+ }); >+ } >+ >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // Task: testing entries from the dictionary. >+ audit.define('from-dictionary', (task, should) => { >+ let context = new AudioContext(); >+ >+ for (let i = 0; i < nodeDictionary.length; i++) >+ testConnectMethod(context, should, nodeDictionary[i]); >+ >+ task.done(); >+ }); >+ >+ // Task: testing Media* nodes. >+ audit.define('media-group', (task, should) => { >+ let context = new AudioContext(); >+ >+ // Test MediaElementSourceNode needs an <audio> element. >+ let mediaElement = document.createElement('audio'); >+ testConnectMethod( >+ context, should, >+ {name: 'MediaElementSource', args: [mediaElement]}); >+ >+ testConnectMethod(context, should, {name: 'MediaStreamDestination'}); >+ >+ // MediaStreamSourceNode requires 'stream' object to be constructed, >+ // which is a part of MediaStreamDestinationNode. >+ let streamDestination = context.createMediaStreamDestination(); >+ let stream = streamDestination.stream; >+ testConnectMethod( >+ context, should, {name: 'MediaStreamSource', args: [stream]}); >+ >+ task.done(); >+ }); >+ >+ // Task: test the exception thrown by invalid operation. >+ audit.define('invalid-operation', (task, should) => { >+ let contextA = new AudioContext(); >+ let contextB = new AudioContext(); >+ let gain1 = contextA.createGain(); >+ let gain2 = contextA.createGain(); >+ >+ // Test if the first connection throws correctly. The first gain node >+ // does not have the second output, so it should throw. >+ should(function() { >+ gain1.connect(gain2, 1).connect(contextA.destination); >+ }, 'Connecting with an invalid output').throw('IndexSizeError'); >+ >+ // Test if the second connection throws correctly. The contextB's >+ // destination is not compatible with the nodes from contextA, thus the >+ // first connection succeeds but the second one should throw. >+ should( >+ function() { >+ gain1.connect(gain2).connect(contextB.destination); >+ }, >+ 'Connecting to a node from the different context') >+ .throw('InvalidAccessError'); >+ >+ task.done(); >+ }); >+ >+ // Task: verify if the method chaining actually works. >+ audit.define('verification', (task, should) => { >+ // We pick the lowest sample rate allowed to run the test efficiently. >+ let context = new OfflineAudioContext(1, 128, 3000); >+ >+ let constantBuffer = createConstantBuffer(context, 1, 1.0); >+ >+ let source = context.createBufferSource(); >+ source.buffer = constantBuffer; >+ source.loop = true; >+ >+ let gain1 = context.createGain(); >+ gain1.gain.value = 0.5; >+ let gain2 = context.createGain(); >+ gain2.gain.value = 0.25; >+ >+ source.connect(gain1).connect(gain2).connect(context.destination); >+ source.start(); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ should( >+ buffer.getChannelData(0), >+ 'The output of chained connection of gain nodes') >+ .beConstantValueOf(0.125); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..737345fc7a03c9fce2378fbc50092cadec5dea54 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order-expected.txt >@@ -0,0 +1,8 @@ >+CONSOLE MESSAGE: line 361: TypeError: undefined is not an object (evaluating 'this._actual.then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'this._actual.then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Test connections] AudioNode connection order doesn't trigger assertion errors >+PASS Connecting nodes did not throw an exception. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eca15dedfa0fdcd7b575fb45ad0804c3fc636ada >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html >@@ -0,0 +1,77 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode-connect-order.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ let sampleRate = 44100.0; >+ let renderLengthSeconds = 0.125; >+ let delayTimeSeconds = 0.1; >+ >+ function createSinWaveBuffer(context, lengthInSeconds, frequency) { >+ let audioBuffer = >+ context.createBuffer(1, lengthInSeconds * sampleRate, sampleRate); >+ >+ let n = audioBuffer.length; >+ let data = audioBuffer.getChannelData(0); >+ >+ for (let i = 0; i < n; ++i) { >+ data[i] = Math.sin(frequency * 2 * Math.PI * i / sampleRate); >+ } >+ >+ return audioBuffer; >+ } >+ >+ audit.define( >+ { >+ label: 'Test connections', >+ description: >+ 'AudioNode connection order doesn\'t trigger assertion errors' >+ }, >+ function(task, should) { >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 1, sampleRate * renderLengthSeconds, sampleRate); >+ let toneBuffer = >+ createSinWaveBuffer(context, renderLengthSeconds, 880); >+ >+ let bufferSource = context.createBufferSource(); >+ bufferSource.buffer = toneBuffer; >+ bufferSource.connect(context.destination); >+ >+ let delay = context.createDelay(); >+ delay.delayTime.value = delayTimeSeconds; >+ >+ // We connect delay node to gain node before anything is connected >+ // to delay node itself. We do this because we try to trigger the >+ // ASSERT which might be fired due to AudioNode connection order, >+ // especially when gain node and delay node is involved e.g. >+ // https://bugs.webkit.org/show_bug.cgi?id=76685. >+ >+ should(() => { >+ let gain = context.createGain(); >+ gain.connect(context.destination); >+ delay.connect(gain); >+ }, 'Connecting nodes').notThrow(); >+ >+ bufferSource.start(0); >+ >+ let promise = context.startRendering(); >+ >+ should(promise, 'OfflineContext startRendering()') >+ .beResolved() >+ .then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..3eb265b2cf78773ed88b44ce2597bc69a706dfd1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam-expected.txt >@@ -0,0 +1,9 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [disconnect(AudioParam)] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c3d3fae2155602bbae7494e0e1439ea1a477b054 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html >@@ -0,0 +1,214 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode-disconnect-audioparam.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let renderQuantum = 128; >+ >+ let sampleRate = 44100; >+ let renderDuration = 0.5; >+ let disconnectTime = 0.5 * renderDuration; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // Calculate the index for disconnection. >+ function getDisconnectIndex(disconnectTime) { >+ let disconnectIndex = disconnectTime * sampleRate; >+ return disconnectIndex -= (disconnectIndex) % renderQuantum; >+ } >+ >+ // Get the index of value change. >+ function getValueChangeIndex(array, targetValue) { >+ return array.findIndex(function(element, index) { >+ if (element === targetValue) >+ return true; >+ }); >+ } >+ >+ // Task 1: test disconnect(AudioParam) method. >+ audit.define('disconnect(AudioParam)', (task, should) => { >+ >+ // Creates a buffer source with value [1] and then connect it to two >+ // gain nodes in series. The output of the buffer source is lowered by >+ // half >+ // (* 0.5) and then connected to two |.gain| AudioParams in each gain >+ // node. >+ // >+ // (1) bufferSource => gain1 => gain2 >+ // (2) bufferSource => half => gain1.gain >+ // (3) half => gain2.gain >+ // >+ // This graph should produce the output of 2.25 (= 1 * 1.5 * 1.5). After >+ // disconnecting (3), it should produce 1.5. >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ let source = context.createBufferSource(); >+ let buffer1ch = createConstantBuffer(context, 1, 1); >+ let half = context.createGain(); >+ let gain1 = context.createGain(); >+ let gain2 = context.createGain(); >+ >+ source.buffer = buffer1ch; >+ source.loop = true; >+ half.gain.value = 0.5; >+ >+ source.connect(gain1); >+ gain1.connect(gain2); >+ gain2.connect(context.destination); >+ source.connect(half); >+ >+ // Connecting |half| to both |gain1.gain| and |gain2.gain| amplifies the >+ // signal by 2.25 (= 1.5 * 1.5) because each gain node amplifies the >+ // signal by 1.5 (= 1.0 + 0.5). >+ half.connect(gain1.gain); >+ half.connect(gain2.gain); >+ >+ source.start(); >+ >+ // Schedule the disconnection at the half of render duration. >+ context.suspend(disconnectTime).then(function() { >+ half.disconnect(gain2.gain); >+ context.resume(); >+ }); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ let channelData = buffer.getChannelData(0); >+ let disconnectIndex = getDisconnectIndex(disconnectTime); >+ let valueChangeIndex = getValueChangeIndex(channelData, 1.5); >+ >+ // Expected values are: 1 * 1.5 * 1.5 -> 1 * 1.5 = [2.25, 1.5] >+ should(channelData, 'Channel #0').containValues([2.25, 1.5]); >+ should(valueChangeIndex, 'The index of value change') >+ .beEqualTo(disconnectIndex); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 2: test disconnect(AudioParam, output) method. >+ audit.define('disconnect(AudioParam, output)', (task, should) => { >+ >+ // Create a 2-channel buffer source with [1, 2] in each channel and >+ // make a serial connection through gain1 and gain 2. The make the >+ // buffer source half with a gain node and connect it to a 2-output >+ // splitter. Connect each output to 2 gain AudioParams respectively. >+ // >+ // (1) bufferSource => gain1 => gain2 >+ // (2) bufferSource => half => splitter(2) >+ // (3) splitter#0 => gain1.gain >+ // (4) splitter#1 => gain2.gain >+ // >+ // This graph should produce 3 (= 1 * 1.5 * 2) and 6 (= 2 * 1.5 * 2) for >+ // each channel. After disconnecting (4), it should output 1.5 and 3. >+ let context = >+ new OfflineAudioContext(2, renderDuration * sampleRate, sampleRate); >+ let source = context.createBufferSource(); >+ let buffer2ch = createConstantBuffer(context, 1, [1, 2]); >+ let splitter = context.createChannelSplitter(2); >+ let half = context.createGain(); >+ let gain1 = context.createGain(); >+ let gain2 = context.createGain(); >+ >+ source.buffer = buffer2ch; >+ source.loop = true; >+ half.gain.value = 0.5; >+ >+ source.connect(gain1); >+ gain1.connect(gain2); >+ gain2.connect(context.destination); >+ >+ // |source| originally is [1, 2] but it becomes [0.5, 1] after 0.5 gain. >+ // Each splitter's output will be applied to |gain1.gain| and >+ // |gain2.gain| respectively in an additive fashion. >+ source.connect(half); >+ half.connect(splitter); >+ >+ // This amplifies the signal by 1.5. (= 1.0 + 0.5) >+ splitter.connect(gain1.gain, 0); >+ >+ // This amplifies the signal by 2. (= 1.0 + 1.0) >+ splitter.connect(gain2.gain, 1); >+ >+ source.start(); >+ >+ // Schedule the disconnection at the half of render duration. >+ context.suspend(disconnectTime).then(function() { >+ splitter.disconnect(gain2.gain, 1); >+ context.resume(); >+ }); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ let channelData0 = buffer.getChannelData(0); >+ let channelData1 = buffer.getChannelData(1); >+ >+ let disconnectIndex = getDisconnectIndex(disconnectTime); >+ let valueChangeIndexCh0 = getValueChangeIndex(channelData0, 1.5); >+ let valueChangeIndexCh1 = getValueChangeIndex(channelData1, 3); >+ >+ // Expected values are: 1 * 1.5 * 2 -> 1 * 1.5 = [3, 1.5] >+ should(channelData0, 'Channel #0').containValues([3, 1.5]); >+ should( >+ valueChangeIndexCh0, >+ 'The index of value change in channel #0') >+ .beEqualTo(disconnectIndex); >+ >+ // Expected values are: 2 * 1.5 * 2 -> 2 * 1.5 = [6, 3] >+ should(channelData1, 'Channel #1').containValues([6, 3]); >+ should( >+ valueChangeIndexCh1, >+ 'The index of value change in channel #1') >+ .beEqualTo(disconnectIndex); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 3: exception checks. >+ audit.define('exceptions', (task, should) => { >+ let context = new AudioContext(); >+ let gain1 = context.createGain(); >+ let splitter = context.createChannelSplitter(2); >+ let gain2 = context.createGain(); >+ let gain3 = context.createGain(); >+ >+ // Connect a splitter to gain nodes and merger so we can test the >+ // possible ways of disconnecting the nodes to verify that appropriate >+ // exceptions are thrown. >+ gain1.connect(splitter); >+ splitter.connect(gain2.gain, 0); >+ splitter.connect(gain3.gain, 1); >+ gain2.connect(gain3); >+ gain3.connect(context.destination); >+ >+ // gain1 is not connected to gain3.gain. Exception should be thrown. >+ should(function() { >+ gain1.disconnect(gain3.gain); >+ }, 'gain1.disconnect(gain3.gain)').throw('InvalidAccessError'); >+ >+ // When the output index is good but the destination is invalid. >+ should(function() { >+ splitter.disconnect(gain1.gain, 1); >+ }, 'splitter.disconnect(gain1.gain, 1)').throw('InvalidAccessError'); >+ >+ // When both arguments are wrong, throw IndexSizeError first. >+ should(function() { >+ splitter.disconnect(gain1.gain, 2); >+ }, 'splitter.disconnect(gain1.gain, 2)').throw('IndexSizeError'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..07a1484117fd699cd650c5bba7481191e08eec20 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-expected.txt >@@ -0,0 +1,9 @@ >+CONSOLE MESSAGE: line 42: TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [disconnect()] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b29c09d395fc2815ee5441fdb06320ad02f2f3f5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html >@@ -0,0 +1,298 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode-disconnect.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Task 1: test disconnect() method. >+ audit.define('disconnect()', (task, should) => { >+ >+ // Connect a source to multiple gain nodes, each connected to the >+ // destination. Then disconnect the source. The expected output should >+ // be all zeros since the source was disconnected. >+ let context = new OfflineAudioContext(1, 128, 44100); >+ let source = context.createBufferSource(); >+ let buffer1ch = createConstantBuffer(context, 128, [1]); >+ let gain1 = context.createGain(); >+ let gain2 = context.createGain(); >+ let gain3 = context.createGain(); >+ >+ source.buffer = buffer1ch; >+ >+ source.connect(gain1); >+ source.connect(gain2); >+ source.connect(gain3); >+ gain1.connect(context.destination); >+ gain2.connect(context.destination); >+ gain3.connect(context.destination); >+ source.start(); >+ >+ // This disconnects everything. >+ source.disconnect(); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ >+ // With everything disconnected, the result should be zero. >+ should(buffer.getChannelData(0), 'Channel #0') >+ .beConstantValueOf(0); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 2: test disconnect(output) method. >+ audit.define('disconnect(output)', (task, should) => { >+ >+ // Create multiple connections from each output of a ChannelSplitter >+ // to a gain node. Then test if disconnecting a single output of >+ // splitter is actually disconnected. >+ let context = new OfflineAudioContext(1, 128, 44100); >+ let source = context.createBufferSource(); >+ let buffer3ch = createConstantBuffer(context, 128, [1, 2, 3]); >+ let splitter = context.createChannelSplitter(3); >+ let sum = context.createGain(); >+ >+ source.buffer = buffer3ch; >+ >+ source.connect(splitter); >+ splitter.connect(sum, 0); >+ splitter.connect(sum, 1); >+ splitter.connect(sum, 2); >+ sum.connect(context.destination); >+ source.start(); >+ >+ // This disconnects the second output. >+ splitter.disconnect(1); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ >+ // The rendered channel should contain 4. (= 1 + 0 + 3) >+ should(buffer.getChannelData(0), 'Channel #0') >+ .beConstantValueOf(4); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 3: test disconnect(AudioNode) method. >+ audit.define('disconnect(AudioNode)', (task, should) => { >+ >+ // Connect a source to multiple gain nodes. Then test if disconnecting a >+ // single destination selectively works correctly. >+ let context = new OfflineAudioContext(1, 128, 44100); >+ let source = context.createBufferSource(); >+ let buffer1ch = createConstantBuffer(context, 128, [1]); >+ let gain1 = context.createGain(); >+ let gain2 = context.createGain(); >+ let gain3 = context.createGain(); >+ let orphan = context.createGain(); >+ >+ source.buffer = buffer1ch; >+ >+ source.connect(gain1); >+ source.connect(gain2); >+ source.connect(gain3); >+ gain1.connect(context.destination); >+ gain2.connect(context.destination); >+ gain3.connect(context.destination); >+ source.start(); >+ >+ source.disconnect(gain2); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ >+ // The |sum| gain node should produce value 2. (1 + 0 + 1 = 2) >+ should(buffer.getChannelData(0), 'Channel #0') >+ .beConstantValueOf(2); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 4: test disconnect(AudioNode, output) method. >+ audit.define('disconnect(AudioNode, output)', (task, should) => { >+ >+ // Connect a buffer with 2 channels with each containing 1 and 2 >+ // respectively to a ChannelSplitter, then connect the splitter to 2 >+ // gain nodes as shown below: >+ // (1) splitter#0 => gain1 >+ // (2) splitter#0 => gain2 >+ // (3) splitter#1 => gain2 >+ // Then disconnect (2) and verify if the selective disconnection on a >+ // specified output of the destination node works correctly. >+ let context = new OfflineAudioContext(1, 128, 44100); >+ let source = context.createBufferSource(); >+ let buffer2ch = createConstantBuffer(context, 128, [1, 2]); >+ let splitter = context.createChannelSplitter(2); >+ let gain1 = context.createGain(); >+ let gain2 = context.createGain(); >+ >+ source.buffer = buffer2ch; >+ >+ source.connect(splitter); >+ splitter.connect(gain1, 0); // gain1 gets channel 0. >+ splitter.connect(gain2, 0); // gain2 sums channel 0 and 1. >+ splitter.connect(gain2, 1); >+ gain1.connect(context.destination); >+ gain2.connect(context.destination); >+ source.start(); >+ >+ splitter.disconnect(gain2, 0); // Now gain2 gets [2] >+ >+ context.startRendering() >+ .then(function(buffer) { >+ >+ // The sum of gain1 and gain2 should produce value 3. (= 1 + 2) >+ should(buffer.getChannelData(0), 'Channel #0') >+ .beConstantValueOf(3); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 5: test disconnect(AudioNode, output, input) method. >+ audit.define('disconnect(AudioNode, output, input)', (task, should) => { >+ >+ // Create a 3-channel buffer with [1, 2, 3] in each channel and then >+ // pass it through a splitter and a merger. Each input/output of the >+ // splitter and the merger is connected in a sequential order as shown >+ // below. >+ // (1) splitter#0 => merger#0 >+ // (2) splitter#1 => merger#1 >+ // (3) splitter#2 => merger#2 >+ // Then disconnect (3) and verify if each channel contains [1] and [2] >+ // respectively. >+ let context = new OfflineAudioContext(3, 128, 44100); >+ let source = context.createBufferSource(); >+ let buffer3ch = createConstantBuffer(context, 128, [1, 2, 3]); >+ let splitter = context.createChannelSplitter(3); >+ let merger = context.createChannelMerger(3); >+ >+ source.buffer = buffer3ch; >+ >+ source.connect(splitter); >+ splitter.connect(merger, 0, 0); >+ splitter.connect(merger, 1, 1); >+ splitter.connect(merger, 2, 2); >+ merger.connect(context.destination); >+ source.start(); >+ >+ splitter.disconnect(merger, 2, 2); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ >+ // Each channel should have 1, 2, and 0 respectively. >+ should(buffer.getChannelData(0), 'Channel #0') >+ .beConstantValueOf(1); >+ should(buffer.getChannelData(1), 'Channel #1') >+ .beConstantValueOf(2); >+ should(buffer.getChannelData(2), 'Channel #2') >+ .beConstantValueOf(0); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task 6: exception checks. >+ audit.define('exceptions', (task, should) => { >+ let context = new OfflineAudioContext(2, 128, 44100); >+ let gain1 = context.createGain(); >+ let splitter = context.createChannelSplitter(2); >+ let merger = context.createChannelMerger(2); >+ let gain2 = context.createGain(); >+ let gain3 = context.createGain(); >+ >+ // Connect a splitter to gain nodes and merger so we can test the >+ // possible ways of disconnecting the nodes to verify that appropriate >+ // exceptions are thrown. >+ gain1.connect(splitter); >+ splitter.connect(gain2, 0); >+ splitter.connect(gain3, 1); >+ splitter.connect(merger, 0, 0); >+ splitter.connect(merger, 1, 1); >+ gain2.connect(gain3); >+ gain3.connect(context.destination); >+ merger.connect(context.destination); >+ >+ // There is no output #2. An exception should be thrown. >+ should(function() { >+ splitter.disconnect(2); >+ }, 'splitter.disconnect(2)').throw('IndexSizeError'); >+ >+ // Disconnecting the output already disconnected should not throw. >+ should(function() { >+ splitter.disconnect(1); >+ splitter.disconnect(1); >+ }, 'Disconnecting a connection twice').notThrow(); >+ >+ // gain1 is not connected gain2. An exception should be thrown. >+ should(function() { >+ gain1.disconnect(gain2); >+ }, 'gain1.disconnect(gain2)').throw('InvalidAccessError'); >+ >+ // gain1 and gain3 are not connected. An exception should be thrown. >+ should(function() { >+ gain1.disconnect(gain3); >+ }, 'gain1.disconnect(gain3)').throw('InvalidAccessError'); >+ >+ // There is no output #2 in the splitter. An exception should be thrown. >+ should(function() { >+ splitter.disconnect(gain2, 2); >+ }, 'splitter.disconnect(gain2, 2)').throw('IndexSizeError'); >+ >+ // The splitter and gain1 are not connected. An exception should be >+ // thrown. >+ should(function() { >+ splitter.disconnect(gain1, 0); >+ }, 'splitter.disconnect(gain1, 0)').throw('InvalidAccessError'); >+ >+ // The splitter output #0 and the gain3 output #0 are not connected. An >+ // exception should be thrown. >+ should(function() { >+ splitter.disconnect(gain3, 0, 0); >+ }, 'splitter.disconnect(gain3, 0, 0)').throw('InvalidAccessError'); >+ >+ // The output index is out of bound. An exception should be thrown. >+ should(function() { >+ splitter.disconnect(merger, 3, 0); >+ }, 'splitter.disconnect(merger, 3, 0)').throw('IndexSizeError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('disabled-outputs', (task, should) => { >+ // See crbug.com/656652 >+ let context = new OfflineAudioContext(2, 1024, 44100); >+ let g1 = context.createGain(); >+ let g2 = context.createGain(); >+ g1.connect(g2); >+ g1.disconnect(g2); >+ let g3 = context.createGain(); >+ g2.connect(g3); >+ g1.connect(g2); >+ context.startRendering() >+ .then(function() { >+ // If we make it here, we passed. >+ should(true, 'Disabled outputs handled') >+ .message('correctly', 'inccorrectly'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..58fb3a474d3be9b884a1b572357a1b98f5e1e85f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-expected.txt >@@ -0,0 +1,18 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Basic tests for AudioNode API. >+PASS AudioBufferSource.numberOfInputs is equal to 0. >+PASS AudioBufferSource.numberOfOutputs is equal to 1. >+PASS AudioContext.destination.numberOfInputs is equal to 1. >+PASS AudioContext.destination.numberOfOutputs is equal to 0. >+PASS audioNode.connect(0, 0, 0) threw TypeError: "Argument 1 ('destination') to AudioNode.connect must be an instance of AudioNode". >+PASS audioNode.connect(null, 0, 0) threw TypeError: "Argument 1 ('destination') to AudioNode.connect must be an instance of AudioNode". >+PASS audioNode.connect(context.destination, 5, 0) threw IndexSizeError: "The index is not in the allowed range.". >+PASS audioNode.connect(context.destination, 0, 5) threw IndexSizeError: "The index is not in the allowed range.". >+PASS audioNode.connect(context.destination, 0, 0) did not throw an exception. >+FAIL X Connecting a node to a different context threw "SyntaxError" instead of InvalidAccessError. assert_true: expected true got false >+FAIL X context3 = new AudioContext(1, 44100, 44100) did not throw an exception. assert_true: expected true got false >+PASS AudioNode is an EventTarget is true. >+FAIL < [test] 2 out of 12 assertions were failed. assert_true: expected true got false >+FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b75cd0b5c0e035602f30751787dff3b0bcd94d9e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html >@@ -0,0 +1,93 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audionode.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <div id="description"></div> >+ <div id="console"></div> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ let context = 0; >+ let context2 = 0; >+ let context3 = 0; >+ >+ audit.define( >+ {label: 'test', description: 'Basic tests for AudioNode API.'}, >+ function(task, should) { >+ >+ context = new AudioContext(); >+ window.audioNode = context.createBufferSource(); >+ >+ // Check input and output numbers of AudioSourceNode. >+ should(audioNode.numberOfInputs, 'AudioBufferSource.numberOfInputs') >+ .beEqualTo(0); >+ should( >+ audioNode.numberOfOutputs, 'AudioBufferSource.numberOfOutputs') >+ .beEqualTo(1); >+ >+ // Check input and output numbers of AudioDestinationNode >+ should( >+ context.destination.numberOfInputs, >+ 'AudioContext.destination.numberOfInputs') >+ .beEqualTo(1); >+ should( >+ context.destination.numberOfOutputs, >+ 'AudioContext.destination.numberOfOutputs') >+ .beEqualTo(0); >+ >+ // Try calling connect() method with illegal values. >+ should( >+ () => audioNode.connect(0, 0, 0), 'audioNode.connect(0, 0, 0)') >+ .throw('TypeError'); >+ should( >+ () => audioNode.connect(null, 0, 0), >+ 'audioNode.connect(null, 0, 0)') >+ .throw('TypeError'); >+ should( >+ () => audioNode.connect(context.destination, 5, 0), >+ 'audioNode.connect(context.destination, 5, 0)') >+ .throw('IndexSizeError'); >+ should( >+ () => audioNode.connect(context.destination, 0, 5), >+ 'audioNode.connect(context.destination, 0, 5)') >+ .throw('IndexSizeError'); >+ >+ should( >+ () => audioNode.connect(context.destination, 0, 0), >+ 'audioNode.connect(context.destination, 0, 0)') >+ .notThrow(); >+ >+ // Create a new context and try to connect the other context's node >+ // to this one. >+ context2 = new AudioContext(); >+ should( >+ () => window.audioNode.connect(context2.destination), >+ 'Connecting a node to a different context') >+ .throw('InvalidAccessError'); >+ >+ // 3-arg AudioContext doesn't create an offline context anymore. >+ should( >+ () => context3 = new AudioContext(1, 44100, 44100), >+ 'context3 = new AudioContext(1, 44100, 44100)') >+ .throw('TypeError'); >+ >+ // Ensure it is an EventTarget >+ should( >+ audioNode instanceof EventTarget, 'AudioNode is an EventTarget') >+ .beTrue(); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..df26e115bb883ca4c147f9a122ff708ff4357525 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 22: SyntaxError: The string did not match the expected pattern. >+ >+Harness Error (FAIL), message = SyntaxError: The string did not match the expected pattern. >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [interp] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html >new file mode 100644 >index 0000000000000000000000000000000000000000..35cfca8e4eec6809832845aa48388d0a30c602fb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html >@@ -0,0 +1,66 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Setting of channelCountMode and channelInterpretation >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ // Fairly arbitrary sample rate and number of frames, except the number of >+ // frames should be more than a few render quantums. >+ let sampleRate = 16000; >+ let renderFrames = 10 * 128; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('interp', (task, should) => { >+ let context = new OfflineAudioContext(1, renderFrames, sampleRate); >+ let node = context.createGain(); >+ >+ // Set a new interpretation and verify that it changed. >+ node.channelInterpretation = 'discrete'; >+ let value = node.channelInterpretation; >+ should(value, 'node.channelInterpretation').beEqualTo('discrete'); >+ node.connect(context.destination); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ // After rendering, the value should have been changed. >+ should( >+ node.channelInterpretation, >+ 'After rendering node.channelInterpretation') >+ .beEqualTo('discrete'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.define('mode', (task, should) => { >+ let context = new OfflineAudioContext(1, renderFrames, sampleRate); >+ let node = context.createGain(); >+ >+ // Set a new mode and verify that it changed. >+ node.channelCountMode = 'explicit'; >+ let value = node.channelCountMode; >+ should(value, 'node.channelCountMode').beEqualTo('explicit'); >+ node.connect(context.destination); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ // After rendering, the value should have been changed. >+ should( >+ node.channelCountMode, >+ 'After rendering node.channelCountMode') >+ .beEqualTo('explicit'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/w3c-import.log >index d88e2f96d28fe23fe43a0d71c244d41433be971c..fb4bc1252663a350dae3348aa942d5740b75e5f5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/w3c-import.log >@@ -14,4 +14,11 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-channel-rules.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-return-value.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f1774f5fcc14479b301765e3db7cc66081712635 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 94: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html >new file mode 100644 >index 0000000000000000000000000000000000000000..517d64f3dbb69e610a5ed17475c45f530f749a42 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html >@@ -0,0 +1,103 @@ >+<!DOCTYPE html> >+<!-- >+Tests that an audio-rate signal (AudioNode output) can be connected to an >+AudioParam. Specifically, this tests that an audio-rate signal coming from an >+AudioBufferSourceNode playing an AudioBuffer containing a specific curve can be >+connected to an AudioGainNode's .gain attribute (an AudioParam). Another >+AudioBufferSourceNode will be the audio source having its gain changed. We load >+this one with an AudioBuffer containing a constant value of 1. Thus it's easy >+to check that the resultant signal should be equal to the gain-scaling curve. >+--> >+<html> >+ <head> >+ <title> >+ audioparam-connect-audioratesignal.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ let sampleRate = 44100.0; >+ let lengthInSeconds = 1; >+ >+ let context = 0; >+ let constantOneBuffer = 0; >+ let linearRampBuffer = 0; >+ >+ function checkResult(renderedBuffer, should) { >+ let renderedData = renderedBuffer.getChannelData(0); >+ let expectedData = linearRampBuffer.getChannelData(0); >+ let n = renderedBuffer.length; >+ >+ should(n, 'Rendered signal length').beEqualTo(linearRampBuffer.length); >+ >+ // Check that the rendered result exactly matches the buffer used to >+ // control gain. This is because we're changing the gain of a signal >+ // having constant value 1. >+ let success = true; >+ for (let i = 0; i < n; ++i) { >+ if (renderedData[i] != expectedData[i]) { >+ success = false; >+ break; >+ } >+ } >+ >+ should( >+ success, >+ 'Rendered signal exactly matches the audio-rate gain changing signal') >+ .beTrue(); >+ } >+ >+ audit.define('test', function(task, should) { >+ let sampleFrameLength = sampleRate * lengthInSeconds; >+ >+ // Create offline audio context. >+ context = new OfflineAudioContext(1, sampleFrameLength, sampleRate); >+ >+ // Create buffer used by the source which will have its gain controlled. >+ constantOneBuffer = createConstantBuffer(context, sampleFrameLength, 1); >+ >+ // Create buffer used to control gain. >+ linearRampBuffer = createLinearRampBuffer(context, sampleFrameLength); >+ >+ // Create the two sources. >+ >+ let constantSource = context.createBufferSource(); >+ constantSource.buffer = constantOneBuffer; >+ >+ let gainChangingSource = context.createBufferSource(); >+ gainChangingSource.buffer = linearRampBuffer; >+ >+ // Create a gain node controlling the gain of constantSource and make >+ // the connections. >+ let gainNode = context.createGain(); >+ >+ // Intrinsic baseline gain of zero. >+ gainNode.gain.value = 0; >+ >+ constantSource.connect(gainNode); >+ gainNode.connect(context.destination); >+ >+ // Connect an audio-rate signal to control the .gain AudioParam. >+ // This is the heart of what is being tested. >+ gainChangingSource.connect(gainNode.gain); >+ >+ // Start both sources at time 0. >+ constantSource.start(0); >+ gainChangingSource.start(0); >+ >+ context.startRendering().then(buffer => { >+ checkResult(buffer, should); >+ task.done(); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..81c278043df741a27910bbacf6053c499966f9d7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values-expected.txt >@@ -0,0 +1,10 @@ >+CONSOLE MESSAGE: line 41: TypeError: undefined is not an object (evaluating 'context.createGain') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.createGain') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+FAIL X Creating context for testing incorrectly threw SyntaxError: "The string did not match the expected pattern.". assert_true: expected true got false >+FAIL < [initialize] 1 out of 1 assertions were failed. assert_true: expected true got false >+PASS > [test value] Test non-finite arguments for AudioParam value >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c2d18de2170843564f01e47cef420332ba251272 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html >@@ -0,0 +1,235 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audioparam-exceptional-values.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Context to use for all of the tests. The context isn't used for any >+ // processing; just need one for creating a gain node, which is used for >+ // all the tests. >+ let context; >+ >+ // For these values, AudioParam methods should throw a Typeerror because >+ // they are not finite values. >+ let nonFiniteValues = [Infinity, -Infinity, NaN]; >+ >+ audit.define('initialize', (task, should) => { >+ should(() => { >+ // Context for testing. Rendering isn't done, so any valid values can >+ // be used here so might as well make them small. >+ context = new OfflineAudioContext(1, 1, 8000); >+ }, 'Creating context for testing').notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'test value', >+ description: 'Test non-finite arguments for AudioParam value' >+ }, >+ (task, should) => { >+ let gain = context.createGain(); >+ >+ // Default method for generating the arguments for an automation >+ // method for testing the value of the automation. >+ let defaultFuncArg = (value) => [value, 1]; >+ >+ // Test the value parameter >+ doTests(should, gain, 'TypeError', nonFiniteValues, [ >+ {automationName: 'setValueAtTime', funcArg: defaultFuncArg}, { >+ automationName: 'linearRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ { >+ automationName: 'exponentialRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ { >+ automationName: 'setTargetAtTime', >+ funcArg: (value) => [value, 1, 1] >+ } >+ ]); >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'test time', >+ description: 'Test non-finite arguments for AudioParam time' >+ }, >+ (task, should) => { >+ let gain = context.createGain(); >+ >+ // Default method for generating the arguments for an automation >+ // method for testing the time parameter of the automation. >+ let defaultFuncArg = (startTime) => [1, startTime]; >+ >+ // Test the time parameter >+ doTests(should, gain, 'TypeError', nonFiniteValues, [ >+ {automationName: 'setValueAtTime', funcArg: defaultFuncArg}, >+ { >+ automationName: 'linearRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ { >+ automationName: 'exponentialRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ // Test start time for setTarget >+ { >+ automationName: 'setTargetAtTime', >+ funcArg: (startTime) => [1, startTime, 1] >+ }, >+ // Test time constant for setTarget >+ { >+ automationName: 'setTargetAtTime', >+ funcArg: (timeConstant) => [1, 1, timeConstant] >+ }, >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'test setValueCurve', >+ description: 'Test non-finite arguments for setValueCurveAtTime' >+ }, >+ (task, should) => { >+ let gain = context.createGain(); >+ >+ // Just an array for use by setValueCurveAtTime. The length and >+ // contents of the array are not important. >+ let curve = new Float32Array(3); >+ >+ doTests(should, gain, 'TypeError', nonFiniteValues, [ >+ { >+ automationName: 'setValueCurveAtTime', >+ funcArg: (startTime) => [curve, startTime, 1] >+ }, >+ ]); >+ >+ // Non-finite values for the curve should signal an error >+ doTests( >+ should, gain, 'TypeError', >+ [[1, 2, Infinity, 3], [1, NaN, 2, 3]], [{ >+ automationName: 'setValueCurveAtTime', >+ funcArg: (c) => [c, 1, 1] >+ }]); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'special cases 1', >+ description: 'Test exceptions for finite values' >+ }, >+ (task, should) => { >+ let gain = context.createGain(); >+ >+ // Default method for generating the arguments for an automation >+ // method for testing the time parameter of the automation. >+ let defaultFuncArg = (startTime) => [1, startTime]; >+ >+ // Test the time parameter >+ let curve = new Float32Array(3); >+ doTests(should, gain, 'RangeError', [-1], [ >+ {automationName: 'setValueAtTime', funcArg: defaultFuncArg}, >+ { >+ automationName: 'linearRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ { >+ automationName: 'exponentialRampToValueAtTime', >+ funcArg: defaultFuncArg >+ }, >+ { >+ automationName: 'setTargetAtTime', >+ funcArg: (startTime) => [1, startTime, 1] >+ }, >+ // Test time constant >+ { >+ automationName: 'setTargetAtTime', >+ funcArg: (timeConstant) => [1, 1, timeConstant] >+ }, >+ // startTime and duration for setValueCurve >+ { >+ automationName: 'setValueCurveAtTime', >+ funcArg: (startTime) => [curve, startTime, 1] >+ }, >+ { >+ automationName: 'setValueCurveAtTime', >+ funcArg: (duration) => [curve, 1, duration] >+ }, >+ ]); >+ >+ // One final test for setValueCurve: duration can't be 0. >+ should( >+ () => gain.gain.setValueCurveAtTime(curve, 1, 0), >+ 'gain.gain.setValueCurveAtTime(curve, 1, 0)') >+ .throw('RangeError'); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'special cases 2', >+ description: 'Test special cases for expeonentialRamp' >+ }, >+ (task, should) => { >+ let gain = context.createGain(); >+ >+ doTests(should, gain, 'RangeError', [0, -1e-100, 1e-100], [{ >+ automationName: 'exponentialRampToValueAtTime', >+ funcArg: (value) => [value, 1] >+ }]); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ >+ // Run test over the set of values in |testValues| for all of the >+ // automation methods in |testMethods|. The expected error type is >+ // |errorName|. |testMethods| is an array of dictionaries with attributes >+ // |automationName| giving the name of the automation method to be tested >+ // and |funcArg| being a function of one parameter that produces an array >+ // that will be used as the argument to the automation method. >+ function doTests(should, node, errorName, testValues, testMethods) { >+ testValues.forEach(value => { >+ testMethods.forEach(method => { >+ let args = method.funcArg(value); >+ let message = 'gain.gain.' + method.automationName + '(' + >+ argString(args) + ')'; >+ should(() => node.gain[method.automationName](...args), message) >+ .throw(errorName); >+ }); >+ }); >+ } >+ >+ // Specialized printer for automation arguments so that messages make >+ // sense. We assume the first element is either a number or an array. If >+ // it's an array, there are always three elements, and we want to print >+ // out the brackets for the array argument. >+ function argString(arg) { >+ if (typeof(arg[0]) === 'number') { >+ return arg.toString(); >+ } >+ >+ return '[' + arg[0] + '],' + arg[1] + ',' + arg[2]; >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..ede4fd1465e713aa1780d599b74ceb7e5c208a95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime-expected.txt >@@ -0,0 +1,108 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] AudioParam exponentialRampToValueAtTime() functionality >+PASS Number of tests started and ended at the correct time is equal to 100. >+PASS Max error for test 0 at offset 126 is less than or equal to 0.00001222. >+PASS Max error for test 1 at offset 1535 is less than or equal to 0.00001222. >+PASS Max error for test 2 at offset 3967 is less than or equal to 0.00001222. >+PASS Max error for test 3 at offset 5247 is less than or equal to 0.00001222. >+PASS Max error for test 4 at offset 5503 is less than or equal to 0.00001222. >+PASS Max error for test 5 at offset 7679 is less than or equal to 0.00001222. >+PASS Max error for test 6 at offset 8063 is less than or equal to 0.00001222. >+PASS Max error for test 7 at offset 9471 is less than or equal to 0.00001222. >+PASS Max error for test 8 at offset 11902 is less than or equal to 0.00001222. >+PASS Max error for test 9 at offset 13183 is less than or equal to 0.00001222. >+PASS Max error for test 10 at offset 14462 is less than or equal to 0.00001222. >+PASS Max error for test 11 at offset 14719 is less than or equal to 0.00001222. >+PASS Max error for test 12 at offset 15999 is less than or equal to 0.00001222. >+PASS Max error for test 13 at offset 17919 is less than or equal to 0.00001222. >+PASS Max error for test 14 at offset 18686 is less than or equal to 0.00001222. >+PASS Max error for test 15 at offset 21119 is less than or equal to 0.00001222. >+PASS Max error for test 16 at offset 21375 is less than or equal to 0.00001222. >+PASS Max error for test 17 at offset 23807 is less than or equal to 0.00001222. >+PASS Max error for test 18 at offset 23935 is less than or equal to 0.00001222. >+PASS Max error for test 19 at offset 26367 is less than or equal to 0.00001222. >+PASS Max error for test 20 at offset 26623 is less than or equal to 0.00001222. >+PASS Max error for test 21 at offset 29055 is less than or equal to 0.00001222. >+PASS Max error for test 22 at offset 29311 is less than or equal to 0.00001222. >+PASS Max error for test 23 at offset 31743 is less than or equal to 0.00001222. >+PASS Max error for test 24 at offset 31998 is less than or equal to 0.00001222. >+PASS Max error for test 25 at offset 34175 is less than or equal to 0.00001222. >+PASS Max error for test 26 at offset 34558 is less than or equal to 0.00001222. >+PASS Max error for test 27 at offset 36351 is less than or equal to 0.00001222. >+PASS Max error for test 28 at offset 37247 is less than or equal to 0.00001222. >+PASS Max error for test 29 at offset 39679 is less than or equal to 0.00001222. >+PASS Max error for test 30 at offset 40703 is less than or equal to 0.00001222. >+PASS Max error for test 31 at offset 41599 is less than or equal to 0.00001222. >+PASS Max error for test 32 at offset 43646 is less than or equal to 0.00001222. >+PASS Max error for test 33 at offset 44415 is less than or equal to 0.00001222. >+PASS Max error for test 34 at offset 45183 is less than or equal to 0.00001222. >+PASS Max error for test 35 at offset 47103 is less than or equal to 0.00001222. >+PASS Max error for test 36 at offset 48895 is less than or equal to 0.00001222. >+PASS Max error for test 37 at offset 49151 is less than or equal to 0.00001222. >+PASS Max error for test 38 at offset 51583 is less than or equal to 0.00001222. >+PASS Max error for test 39 at offset 52735 is less than or equal to 0.00001222. >+PASS Max error for test 40 at offset 53247 is less than or equal to 0.00001222. >+PASS Max error for test 41 at offset 54527 is less than or equal to 0.00001222. >+PASS Max error for test 42 at offset 56447 is less than or equal to 0.00001222. >+PASS Max error for test 43 at offset 57215 is less than or equal to 0.00001222. >+PASS Max error for test 44 at offset 58879 is less than or equal to 0.00001222. >+PASS Max error for test 45 at offset 59775 is less than or equal to 0.00001222. >+PASS Max error for test 46 at offset 61695 is less than or equal to 0.00001222. >+PASS Max error for test 47 at offset 62335 is less than or equal to 0.00001222. >+PASS Max error for test 48 at offset 64255 is less than or equal to 0.00001222. >+PASS Max error for test 49 at offset 65151 is less than or equal to 0.00001222. >+PASS Max error for test 50 at offset 67455 is less than or equal to 0.00001222. >+PASS Max error for test 51 at offset 67711 is less than or equal to 0.00001222. >+PASS Max error for test 52 at offset 69630 is less than or equal to 0.00001222. >+PASS Max error for test 53 at offset 70527 is less than or equal to 0.00001222. >+PASS Max error for test 54 at offset 72063 is less than or equal to 0.00001222. >+PASS Max error for test 55 at offset 73087 is less than or equal to 0.00001222. >+PASS Max error for test 56 at offset 74879 is less than or equal to 0.00001222. >+PASS Max error for test 57 at offset 76671 is less than or equal to 0.00001222. >+PASS Max error for test 58 at offset 77935 is less than or equal to 0.00001222. >+PASS Max error for test 59 at offset 78463 is less than or equal to 0.00001222. >+PASS Max error for test 60 at offset 80382 is less than or equal to 0.00001222. >+PASS Max error for test 61 at offset 81151 is less than or equal to 0.00001222. >+PASS Max error for test 62 at offset 82175 is less than or equal to 0.00001222. >+PASS Max error for test 63 at offset 83839 is less than or equal to 0.00001222. >+PASS Max error for test 64 at offset 85247 is less than or equal to 0.00001222. >+PASS Max error for test 65 at offset 86143 is less than or equal to 0.00001222. >+PASS Max error for test 66 at offset 88063 is less than or equal to 0.00001222. >+PASS Max error for test 67 at offset 89087 is less than or equal to 0.00001222. >+PASS Max error for test 68 at offset 91262 is less than or equal to 0.00001222. >+PASS Max error for test 69 at offset 92287 is less than or equal to 0.00001222. >+PASS Max error for test 70 at offset 93822 is less than or equal to 0.00001222. >+PASS Max error for test 71 at offset 94975 is less than or equal to 0.00001222. >+PASS Max error for test 72 at offset 96510 is less than or equal to 0.00001222. >+PASS Max error for test 73 at offset 96891 is less than or equal to 0.00001222. >+PASS Max error for test 74 at offset 98687 is less than or equal to 0.00001222. >+PASS Max error for test 75 at offset 99839 is less than or equal to 0.00001222. >+PASS Max error for test 76 at offset 100990 is less than or equal to 0.00001222. >+PASS Max error for test 77 at offset 102782 is less than or equal to 0.00001222. >+PASS Max error for test 78 at offset 104447 is less than or equal to 0.00001222. >+PASS Max error for test 79 at offset 105710 is less than or equal to 0.00001222. >+PASS Max error for test 80 at offset 107132 is less than or equal to 0.00001222. >+PASS Max error for test 81 at offset 107363 is less than or equal to 0.00001222. >+PASS Max error for test 82 at offset 108799 is less than or equal to 0.00001222. >+PASS Max error for test 83 at offset 110438 is less than or equal to 0.00001222. >+PASS Max error for test 84 at offset 112112 is less than or equal to 0.00001222. >+PASS Max error for test 85 at offset 113596 is less than or equal to 0.00001222. >+PASS Max error for test 86 at offset 115071 is less than or equal to 0.00001222. >+PASS Max error for test 87 at offset 116351 is less than or equal to 0.00001222. >+PASS Max error for test 88 at offset 117375 is less than or equal to 0.00001222. >+PASS Max error for test 89 at offset 118902 is less than or equal to 0.00001222. >+PASS Max error for test 90 at offset 120188 is less than or equal to 0.00001222. >+PASS Max error for test 91 at offset 121701 is less than or equal to 0.00001222. >+PASS Max error for test 92 at offset 123007 is less than or equal to 0.00001222. >+PASS Max error for test 93 at offset 124159 is less than or equal to 0.00001222. >+PASS Max error for test 94 at offset 124923 is less than or equal to 0.00001222. >+PASS Max error for test 95 at offset 126999 is less than or equal to 0.00001222. >+PASS Max error for test 96 at offset 127861 is less than or equal to 0.00001222. >+PASS Max error for test 97 at offset 129532 is less than or equal to 0.00001222. >+PASS Max error for test 98 at offset 130551 is less than or equal to 0.00001222. >+PASS Max error for test 99 at offset 132093 is less than or equal to 0.00001222. >+PASS Number of failed tests with an acceptable relative tolerance of 0.00001222 is equal to 0. >+PASS < [test] All assertions passed. (total 102 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bec4c1286b4aaf7ba1b7aa7209ff41dad6c02dbd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html >@@ -0,0 +1,63 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioParam.exponentialRampToValueAtTime >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Play a long DC signal out through an AudioGainNode, and call >+ // setValueAtTime() and exponentialRampToValueAtTime() at regular >+ // intervals to set the starting and ending values for an exponential >+ // ramp. Each time interval has a ramp with a different starting and >+ // ending value so that there is a discontinuity at each time interval >+ // boundary. The discontinuity is for testing timing. Also, we alternate >+ // between an increasing and decreasing ramp for each interval. >+ >+ // Number of tests to run. >+ let numberOfTests = 100; >+ >+ // Max allowed difference between the rendered data and the expected >+ // result. >+ let maxAllowedError = 1.222e-5; >+ >+ // The AudioGainNode starts with this value instead of the default value. >+ let initialValue = 100; >+ >+ // Set the gain node value to the specified value at the specified time. >+ function setValue(value, time) { >+ gainNode.gain.setValueAtTime(value, time); >+ } >+ >+ // Generate an exponential ramp ending at time |endTime| with an ending >+ // value of |value|. >+ function generateRamp(value, startTime, endTime){ >+ // |startTime| is ignored because the exponential ramp >+ // uses the value from the setValueAtTime() call above. >+ gainNode.gain.exponentialRampToValueAtTime(value, endTime)} >+ >+ audit.define( >+ { >+ label: 'test', >+ description: >+ 'AudioParam exponentialRampToValueAtTime() functionality' >+ }, >+ function(task, should) { >+ createAudioGraphAndTest( >+ task, should, numberOfTests, initialValue, setValue, >+ generateRamp, 'exponentialRampToValueAtTime()', maxAllowedError, >+ createExponentialRampArray); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..47611533408a9eb53a77f65e618db432870126dc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime-expected.txt >@@ -0,0 +1,9 @@ >+CONSOLE MESSAGE: line 33: TypeError: undefined is not an object (evaluating 'graph.context.startRendering() >+ .then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'graph.context.startRendering() >+ .then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [linearRamp] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d8f38eeba0857a352badbdbeef3eca8bf9a6f087 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime.html >@@ -0,0 +1,73 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ AudioParam with Huge End Time >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 48000; >+ // Render for some small (but fairly arbitrary) time. >+ let renderDuration = 0.125; >+ // Any huge time value that won't fit in a size_t (2^64 on a 64-bit >+ // machine). >+ let largeTime = 1e300; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // See crbug.com/582701. Create an audioparam with a huge end time and >+ // verify that to automation is run. We don't care about the actual >+ // results, just that it runs. >+ >+ // Test linear ramp with huge end time >+ audit.define('linearRamp', (task, should) => { >+ let graph = createGraph(); >+ graph.gain.gain.linearRampToValueAtTime(0.1, largeTime); >+ >+ graph.source.start(); >+ graph.context.startRendering() >+ .then(function(buffer) { >+ should(true, 'linearRampToValue(0.1, ' + largeTime + ')') >+ .message('successfully rendered', 'unsuccessfully rendered'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Test exponential ramp with huge end time >+ audit.define('exponentialRamp', (task, should) => { >+ let graph = createGraph(); >+ graph.gain.gain.exponentialRampToValueAtTime(.1, largeTime); >+ >+ graph.source.start(); >+ graph.context.startRendering() >+ .then(function(buffer) { >+ should(true, 'exponentialRampToValue(0.1, ' + largeTime + ')') >+ .message('successfully rendered', 'unsuccessfully rendered'); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ >+ // Create the graph and return the context, the source, and the gain node. >+ function createGraph() { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ let src = context.createBufferSource(); >+ src.buffer = createConstantBuffer(context, 1, 1); >+ src.loop = true; >+ let gain = context.createGain(); >+ src.connect(gain); >+ gain.connect(context.destination); >+ gain.gain.setValueAtTime(1, 0.1 / sampleRate); >+ >+ return {context: context, gain: gain, source: src}; >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..487c40af45383f7897aada8554998474a57b0a00 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime-expected.txt >@@ -0,0 +1,108 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] AudioParam linearRampToValueAtTime() functionality >+PASS Number of tests started and ended at the correct time is equal to 100. >+PASS Max error for test 0 at offset 657 is less than or equal to 0.000001865. >+PASS Max error for test 1 at offset 1553 is less than or equal to 0.000001865. >+PASS Max error for test 2 at offset 2982 is less than or equal to 0.000001865. >+PASS Max error for test 3 at offset 4556 is less than or equal to 0.000001865. >+PASS Max error for test 4 at offset 6231 is less than or equal to 0.000001865. >+PASS Max error for test 5 at offset 7111 is less than or equal to 0.000001865. >+PASS Max error for test 6 at offset 8479 is less than or equal to 0.000001865. >+PASS Max error for test 7 at offset 9900 is less than or equal to 0.000001865. >+PASS Max error for test 8 at offset 11046 is less than or equal to 0.000001865. >+PASS Max error for test 9 at offset 12344 is less than or equal to 0.000001865. >+PASS Max error for test 10 at offset 13766 is less than or equal to 0.000001865. >+PASS Max error for test 11 at offset 14710 is less than or equal to 0.000001865. >+PASS Max error for test 12 at offset 16419 is less than or equal to 0.000001865. >+PASS Max error for test 13 at offset 17678 is less than or equal to 0.000001865. >+PASS Max error for test 14 at offset 18679 is less than or equal to 0.000001865. >+PASS Max error for test 15 at offset 20112 is less than or equal to 0.000001865. >+PASS Max error for test 16 at offset 21444 is less than or equal to 0.000001865. >+PASS Max error for test 17 at offset 22734 is less than or equal to 0.000001865. >+PASS Max error for test 18 at offset 24352 is less than or equal to 0.000001865. >+PASS Max error for test 19 at offset 25557 is less than or equal to 0.000001865. >+PASS Max error for test 20 at offset 26885 is less than or equal to 0.000001865. >+PASS Max error for test 21 at offset 28311 is less than or equal to 0.000001865. >+PASS Max error for test 22 at offset 29259 is less than or equal to 0.000001865. >+PASS Max error for test 23 at offset 30879 is less than or equal to 0.000001865. >+PASS Max error for test 24 at offset 32157 is less than or equal to 0.000001865. >+PASS Max error for test 25 at offset 33495 is less than or equal to 0.000001865. >+PASS Max error for test 26 at offset 34412 is less than or equal to 0.000001865. >+PASS Max error for test 27 at offset 35867 is less than or equal to 0.000001865. >+PASS Max error for test 28 at offset 37319 is less than or equal to 0.000001865. >+PASS Max error for test 29 at offset 38731 is less than or equal to 0.000001865. >+PASS Max error for test 30 at offset 40033 is less than or equal to 0.000001865. >+PASS Max error for test 31 at offset 41212 is less than or equal to 0.000001865. >+PASS Max error for test 32 at offset 42508 is less than or equal to 0.000001865. >+PASS Max error for test 33 at offset 43790 is less than or equal to 0.000001865. >+PASS Max error for test 34 at offset 45329 is less than or equal to 0.000001865. >+PASS Max error for test 35 at offset 46364 is less than or equal to 0.000001865. >+PASS Max error for test 36 at offset 48151 is less than or equal to 0.000001865. >+PASS Max error for test 37 at offset 49522 is less than or equal to 0.000001865. >+PASS Max error for test 38 at offset 50899 is less than or equal to 0.000001865. >+PASS Max error for test 39 at offset 52255 is less than or equal to 0.000001865. >+PASS Max error for test 40 at offset 52932 is less than or equal to 0.000001865. >+PASS Max error for test 41 at offset 54381 is less than or equal to 0.000001865. >+PASS Max error for test 42 at offset 56219 is less than or equal to 0.000001865. >+PASS Max error for test 43 at offset 57014 is less than or equal to 0.000001865. >+PASS Max error for test 44 at offset 58224 is less than or equal to 0.000001865. >+PASS Max error for test 45 at offset 60171 is less than or equal to 0.000001865. >+PASS Max error for test 46 at offset 61235 is less than or equal to 0.000001865. >+PASS Max error for test 47 at offset 62220 is less than or equal to 0.000001865. >+PASS Max error for test 48 at offset 63879 is less than or equal to 0.000001865. >+PASS Max error for test 49 at offset 64884 is less than or equal to 0.000001865. >+PASS Max error for test 50 at offset 67468 is less than or equal to 0.000001865. >+PASS Max error for test 51 at offset 67844 is less than or equal to 0.000001865. >+PASS Max error for test 52 at offset 69211 is less than or equal to 0.000001865. >+PASS Max error for test 53 at offset 70605 is less than or equal to 0.000001865. >+PASS Max error for test 54 at offset 71998 is less than or equal to 0.000001865. >+PASS Max error for test 55 at offset 73295 is less than or equal to 0.000001865. >+PASS Max error for test 56 at offset 74554 is less than or equal to 0.000001865. >+PASS Max error for test 57 at offset 75896 is less than or equal to 0.000001865. >+PASS Max error for test 58 at offset 76861 is less than or equal to 0.000001865. >+PASS Max error for test 59 at offset 78458 is less than or equal to 0.000001865. >+PASS Max error for test 60 at offset 79798 is less than or equal to 0.000001865. >+PASS Max error for test 61 at offset 81256 is less than or equal to 0.000001865. >+PASS Max error for test 62 at offset 82464 is less than or equal to 0.000001865. >+PASS Max error for test 63 at offset 83954 is less than or equal to 0.000001865. >+PASS Max error for test 64 at offset 84701 is less than or equal to 0.000001865. >+PASS Max error for test 65 at offset 86343 is less than or equal to 0.000001865. >+PASS Max error for test 66 at offset 87335 is less than or equal to 0.000001865. >+PASS Max error for test 67 at offset 89890 is less than or equal to 0.000001865. >+PASS Max error for test 68 at offset 90044 is less than or equal to 0.000001865. >+PASS Max error for test 69 at offset 91455 is less than or equal to 0.000001865. >+PASS Max error for test 70 at offset 92629 is less than or equal to 0.000001865. >+PASS Max error for test 71 at offset 94073 is less than or equal to 0.000001865. >+PASS Max error for test 72 at offset 95912 is less than or equal to 0.000001865. >+PASS Max error for test 73 at offset 96674 is less than or equal to 0.000001865. >+PASS Max error for test 74 at offset 97949 is less than or equal to 0.000001865. >+PASS Max error for test 75 at offset 99861 is less than or equal to 0.000001865. >+PASS Max error for test 76 at offset 101168 is less than or equal to 0.000001865. >+PASS Max error for test 77 at offset 103175 is less than or equal to 0.000001865. >+PASS Max error for test 78 at offset 103711 is less than or equal to 0.000001865. >+PASS Max error for test 79 at offset 104680 is less than or equal to 0.000001865. >+PASS Max error for test 80 at offset 106251 is less than or equal to 0.000001865. >+PASS Max error for test 81 at offset 107716 is less than or equal to 0.000001865. >+PASS Max error for test 82 at offset 108818 is less than or equal to 0.000001865. >+PASS Max error for test 83 at offset 109989 is less than or equal to 0.000001865. >+PASS Max error for test 84 at offset 112153 is less than or equal to 0.000001865. >+PASS Max error for test 85 at offset 113772 is less than or equal to 0.000001865. >+PASS Max error for test 86 at offset 114376 is less than or equal to 0.000001865. >+PASS Max error for test 87 at offset 115112 is less than or equal to 0.000001865. >+PASS Max error for test 88 at offset 116572 is less than or equal to 0.000001865. >+PASS Max error for test 89 at offset 117924 is less than or equal to 0.000001865. >+PASS Max error for test 90 at offset 119326 is less than or equal to 0.000001865. >+PASS Max error for test 91 at offset 120516 is less than or equal to 0.000001865. >+PASS Max error for test 92 at offset 122758 is less than or equal to 0.000001865. >+PASS Max error for test 93 at offset 124309 is less than or equal to 0.000001865. >+PASS Max error for test 94 at offset 125673 is less than or equal to 0.000001865. >+PASS Max error for test 95 at offset 127006 is less than or equal to 0.000001865. >+PASS Max error for test 96 at offset 127202 is less than or equal to 0.000001865. >+PASS Max error for test 97 at offset 128579 is less than or equal to 0.000001865. >+PASS Max error for test 98 at offset 129679 is less than or equal to 0.000001865. >+PASS Max error for test 99 at offset 131112 is less than or equal to 0.000001865. >+PASS Number of failed tests with an acceptable relative tolerance of 0.000001865 is equal to 0. >+PASS < [test] All assertions passed. (total 102 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..509c254d92d891a1f4e6820760e757b03d02366f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioParam.linearRampToValueAtTime >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Play a long DC signal out through an AudioGainNode, and call >+ // setValueAtTime() and linearRampToValueAtTime() at regular intervals to >+ // set the starting and ending values for a linear ramp. Each time >+ // interval has a ramp with a different starting and ending value so that >+ // there is a discontinuity at each time interval boundary. The >+ // discontinuity is for testing timing. Also, we alternate between an >+ // increasing and decreasing ramp for each interval. >+ >+ // Number of tests to run. >+ let numberOfTests = 100; >+ >+ // Max allowed difference between the rendered data and the expected >+ // result. >+ let maxAllowedError = 1.865e-6; >+ >+ // Set the gain node value to the specified value at the specified time. >+ function setValue(value, time) { >+ gainNode.gain.setValueAtTime(value, time); >+ } >+ >+ // Generate a linear ramp ending at time |endTime| with an ending value of >+ // |value|. >+ function generateRamp(value, startTime, endTime){ >+ // |startTime| is ignored because the linear ramp uses the value from >+ // the >+ // setValueAtTime() call above. >+ gainNode.gain.linearRampToValueAtTime(value, endTime)} >+ >+ audit.define( >+ { >+ label: 'test', >+ description: 'AudioParam linearRampToValueAtTime() functionality' >+ }, >+ function(task, should) { >+ createAudioGraphAndTest( >+ task, should, numberOfTests, 1, setValue, generateRamp, >+ 'linearRampToValueAtTime()', maxAllowedError, >+ createLinearRampArray); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..42d15f04c3638006a34608cb7c9ebf01b7e2450e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining-expected.txt >@@ -0,0 +1,15 @@ >+CONSOLE MESSAGE: line 52: SyntaxError: The string did not match the expected pattern. >+ >+Harness Error (FAIL), message = SyntaxError: The string did not match the expected pattern. >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [from-dictionary] >+FAIL X The return value of AudioParam.setValueAtTime() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL X The return value of AudioParam.linearRampToValueAtTime() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL X The return value of AudioParam.exponentialRampToValueAtTime() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL X The return value of AudioParam.setTargetAtTime() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL X The return value of AudioParam.setValueCurveAtTime() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL X The return value of AudioParam.cancelScheduledValues() matches the source AudioParam is not equal to true. Got false. assert_true: expected true got false >+FAIL < [from-dictionary] 6 out of 6 assertions were failed. assert_true: expected true got false >+PASS > [invalid-operation] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ed25a0193b5ebdb40b2758cb9e9efc10b4c9bef2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining.html >@@ -0,0 +1,143 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audioparam-method-chaining.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 8000; >+ >+ // Create a dummy array for setValueCurveAtTime method. >+ let curveArray = new Float32Array([5.0, 6.0]); >+ >+ // AudioNode dictionary with associated dummy arguments. >+ let methodDictionary = [ >+ {name: 'setValueAtTime', args: [1.0, 0.0]}, >+ {name: 'linearRampToValueAtTime', args: [2.0, 1.0]}, >+ {name: 'exponentialRampToValueAtTime', args: [3.0, 2.0]}, >+ {name: 'setTargetAtTime', args: [4.0, 2.0, 0.5]}, >+ {name: 'setValueCurveAtTime', args: [curveArray, 5.0, 1.0]}, >+ {name: 'cancelScheduledValues', args: [6.0]} >+ ]; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // Task: testing entries from the dictionary. >+ audit.define('from-dictionary', (task, should) => { >+ let context = new AudioContext(); >+ >+ methodDictionary.forEach(function(method) { >+ let sourceParam = context.createGain().gain; >+ should( >+ sourceParam === sourceParam[method.name](...method.args), >+ 'The return value of ' + sourceParam.constructor.name + '.' + >+ method.name + '()' + >+ ' matches the source AudioParam') >+ .beEqualTo(true); >+ >+ }); >+ >+ task.done(); >+ }); >+ >+ // Task: test method chaining with invalid operation. >+ audit.define('invalid-operation', (task, should) => { >+ let context = new OfflineAudioContext(1, sampleRate, sampleRate); >+ let osc = context.createOscillator(); >+ let amp1 = context.createGain(); >+ let amp2 = context.createGain(); >+ >+ osc.connect(amp1); >+ osc.connect(amp2); >+ amp1.connect(context.destination); >+ amp2.connect(context.destination); >+ >+ // The first operation fails with an exception, thus the second one >+ // should not have effect on the parameter value. Instead, it should >+ // maintain the default value of 1.0. >+ should( >+ function() { >+ amp1.gain.setValueAtTime(0.25, -1.0) >+ .linearRampToValueAtTime(2.0, 1.0); >+ }, >+ 'Calling setValueAtTime() with a negative end time') >+ .throw('RangeError'); >+ >+ // The first operation succeeds but the second fails due to zero target >+ // value for the exponential ramp. Thus only the first should have >+ // effect on the parameter value, setting the value to 0.5. >+ should( >+ function() { >+ amp2.gain.setValueAtTime(0.5, 0.0).exponentialRampToValueAtTime( >+ 0.0, 1.0); >+ }, >+ 'Calling exponentialRampToValueAtTime() with a zero target value') >+ .throw('RangeError'); >+ >+ osc.start(); >+ osc.stop(1.0); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ should(amp1.gain.value, 'The gain value of the first gain node') >+ .beEqualTo(1.0); >+ should(amp2.gain.value, 'The gain value of the second gain node') >+ .beEqualTo(0.5); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ // Task: verify if the method chaining actually works. Create an arbitrary >+ // envelope and compare the result with the expected one created by JS >+ // code. >+ audit.define('verification', (task, should) => { >+ let context = new OfflineAudioContext(1, sampleRate * 4, sampleRate); >+ let constantBuffer = createConstantBuffer(context, 1, 1.0); >+ >+ let source = context.createBufferSource(); >+ source.buffer = constantBuffer; >+ source.loop = true; >+ >+ let envelope = context.createGain(); >+ >+ source.connect(envelope); >+ envelope.connect(context.destination); >+ >+ envelope.gain.setValueAtTime(0.0, 0.0) >+ .linearRampToValueAtTime(1.0, 1.0) >+ .exponentialRampToValueAtTime(0.5, 2.0) >+ .setTargetAtTime(0.001, 2.0, 0.5); >+ >+ source.start(); >+ >+ context.startRendering() >+ .then(function(buffer) { >+ let expectedEnvelope = >+ createLinearRampArray(0.0, 1.0, 0.0, 1.0, sampleRate); >+ expectedEnvelope.push(...createExponentialRampArray( >+ 1.0, 2.0, 1.0, 0.5, sampleRate)); >+ expectedEnvelope.push(...createExponentialApproachArray( >+ 2.0, 4.0, 0.5, 0.001, sampleRate, 0.5)); >+ >+ // There are slight differences between JS implementation of >+ // AudioParam envelope and the internal implementation. (i.e. >+ // double/float and rounding up) The error threshold is adjusted >+ // empirically through the local testing. >+ should(buffer.getChannelData(0), 'The rendered envelope') >+ .beCloseToArray( >+ expectedEnvelope, {absoluteThreshold: 4.0532e-6}); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fc0960b11b5fa9126b1b0522d827952ad2b8dd0f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime-expected.txt >@@ -0,0 +1,108 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] AudioParam setTargetAtTime() functionality. >+PASS Number of tests started and ended at the correct time is equal to 100. >+PASS Max error for test 0 at offset 1289 is less than or equal to 0.00065683. >+PASS Max error for test 1 at offset 2612 is less than or equal to 0.00065683. >+PASS Max error for test 2 at offset 3935 is less than or equal to 0.00065683. >+PASS Max error for test 3 at offset 5258 is less than or equal to 0.00065683. >+PASS Max error for test 4 at offset 6581 is less than or equal to 0.00065683. >+PASS Max error for test 5 at offset 7904 is less than or equal to 0.00065683. >+PASS Max error for test 6 at offset 9227 is less than or equal to 0.00065683. >+PASS Max error for test 7 at offset 10550 is less than or equal to 0.00065683. >+PASS Max error for test 8 at offset 11873 is less than or equal to 0.00065683. >+PASS Max error for test 9 at offset 13196 is less than or equal to 0.00065683. >+PASS Max error for test 10 at offset 14519 is less than or equal to 0.00065683. >+PASS Max error for test 11 at offset 15842 is less than or equal to 0.00065683. >+PASS Max error for test 12 at offset 17165 is less than or equal to 0.00065683. >+PASS Max error for test 13 at offset 18488 is less than or equal to 0.00065683. >+PASS Max error for test 14 at offset 19811 is less than or equal to 0.00065683. >+PASS Max error for test 15 at offset 21134 is less than or equal to 0.00065683. >+PASS Max error for test 16 at offset 22457 is less than or equal to 0.00065683. >+PASS Max error for test 17 at offset 23780 is less than or equal to 0.00065683. >+PASS Max error for test 18 at offset 25103 is less than or equal to 0.00065683. >+PASS Max error for test 19 at offset 26426 is less than or equal to 0.00065683. >+PASS Max error for test 20 at offset 27749 is less than or equal to 0.00065683. >+PASS Max error for test 21 at offset 29072 is less than or equal to 0.00065683. >+PASS Max error for test 22 at offset 30395 is less than or equal to 0.00065683. >+PASS Max error for test 23 at offset 31718 is less than or equal to 0.00065683. >+PASS Max error for test 24 at offset 33041 is less than or equal to 0.00065683. >+PASS Max error for test 25 at offset 34364 is less than or equal to 0.00065683. >+PASS Max error for test 26 at offset 35687 is less than or equal to 0.00065683. >+PASS Max error for test 27 at offset 37010 is less than or equal to 0.00065683. >+PASS Max error for test 28 at offset 38333 is less than or equal to 0.00065683. >+PASS Max error for test 29 at offset 39656 is less than or equal to 0.00065683. >+PASS Max error for test 30 at offset 40979 is less than or equal to 0.00065683. >+PASS Max error for test 31 at offset 42302 is less than or equal to 0.00065683. >+PASS Max error for test 32 at offset 43625 is less than or equal to 0.00065683. >+PASS Max error for test 33 at offset 44948 is less than or equal to 0.00065683. >+PASS Max error for test 34 at offset 46271 is less than or equal to 0.00065683. >+PASS Max error for test 35 at offset 47594 is less than or equal to 0.00065683. >+PASS Max error for test 36 at offset 48917 is less than or equal to 0.00065683. >+PASS Max error for test 37 at offset 49099 is less than or equal to 0.00065683. >+PASS Max error for test 38 at offset 50422 is less than or equal to 0.00065683. >+PASS Max error for test 39 at offset 51745 is less than or equal to 0.00065683. >+PASS Max error for test 40 at offset 53068 is less than or equal to 0.00065683. >+PASS Max error for test 41 at offset 54391 is less than or equal to 0.00065683. >+PASS Max error for test 42 at offset 55714 is less than or equal to 0.00065683. >+PASS Max error for test 43 at offset 57037 is less than or equal to 0.00065683. >+PASS Max error for test 44 at offset 58360 is less than or equal to 0.00065683. >+PASS Max error for test 45 at offset 59683 is less than or equal to 0.00065683. >+PASS Max error for test 46 at offset 61006 is less than or equal to 0.00065683. >+PASS Max error for test 47 at offset 62329 is less than or equal to 0.00065683. >+PASS Max error for test 48 at offset 63652 is less than or equal to 0.00065683. >+PASS Max error for test 49 at offset 64975 is less than or equal to 0.00065683. >+PASS Max error for test 50 at offset 66298 is less than or equal to 0.00065683. >+PASS Max error for test 51 at offset 67621 is less than or equal to 0.00065683. >+PASS Max error for test 52 at offset 68944 is less than or equal to 0.00065683. >+PASS Max error for test 53 at offset 70267 is less than or equal to 0.00065683. >+PASS Max error for test 54 at offset 71590 is less than or equal to 0.00065683. >+PASS Max error for test 55 at offset 72913 is less than or equal to 0.00065683. >+PASS Max error for test 56 at offset 74236 is less than or equal to 0.00065683. >+PASS Max error for test 57 at offset 75559 is less than or equal to 0.00065683. >+PASS Max error for test 58 at offset 76882 is less than or equal to 0.00065683. >+PASS Max error for test 59 at offset 78205 is less than or equal to 0.00065683. >+PASS Max error for test 60 at offset 79528 is less than or equal to 0.00065683. >+PASS Max error for test 61 at offset 80851 is less than or equal to 0.00065683. >+PASS Max error for test 62 at offset 82174 is less than or equal to 0.00065683. >+PASS Max error for test 63 at offset 83497 is less than or equal to 0.00065683. >+PASS Max error for test 64 at offset 84820 is less than or equal to 0.00065683. >+PASS Max error for test 65 at offset 86143 is less than or equal to 0.00065683. >+PASS Max error for test 66 at offset 87466 is less than or equal to 0.00065683. >+PASS Max error for test 67 at offset 88789 is less than or equal to 0.00065683. >+PASS Max error for test 68 at offset 90112 is less than or equal to 0.00065683. >+PASS Max error for test 69 at offset 91436 is less than or equal to 0.00065683. >+PASS Max error for test 70 at offset 92759 is less than or equal to 0.00065683. >+PASS Max error for test 71 at offset 94082 is less than or equal to 0.00065683. >+PASS Max error for test 72 at offset 95405 is less than or equal to 0.00065683. >+PASS Max error for test 73 at offset 96728 is less than or equal to 0.00065683. >+PASS Max error for test 74 at offset 98051 is less than or equal to 0.00065683. >+PASS Max error for test 75 at offset 99374 is less than or equal to 0.00065683. >+PASS Max error for test 76 at offset 100697 is less than or equal to 0.00065683. >+PASS Max error for test 77 at offset 102020 is less than or equal to 0.00065683. >+PASS Max error for test 78 at offset 103343 is less than or equal to 0.00065683. >+PASS Max error for test 79 at offset 104666 is less than or equal to 0.00065683. >+PASS Max error for test 80 at offset 105989 is less than or equal to 0.00065683. >+PASS Max error for test 81 at offset 107312 is less than or equal to 0.00065683. >+PASS Max error for test 82 at offset 108635 is less than or equal to 0.00065683. >+PASS Max error for test 83 at offset 109958 is less than or equal to 0.00065683. >+PASS Max error for test 84 at offset 111281 is less than or equal to 0.00065683. >+PASS Max error for test 85 at offset 112595 is less than or equal to 0.00065683. >+PASS Max error for test 86 at offset 113918 is less than or equal to 0.00065683. >+PASS Max error for test 87 at offset 115241 is less than or equal to 0.00065683. >+PASS Max error for test 88 at offset 116564 is less than or equal to 0.00065683. >+PASS Max error for test 89 at offset 117887 is less than or equal to 0.00065683. >+PASS Max error for test 90 at offset 119210 is less than or equal to 0.00065683. >+PASS Max error for test 91 at offset 120533 is less than or equal to 0.00065683. >+PASS Max error for test 92 at offset 121856 is less than or equal to 0.00065683. >+PASS Max error for test 93 at offset 123803 is less than or equal to 0.00065683. >+PASS Max error for test 94 at offset 125126 is less than or equal to 0.00065683. >+PASS Max error for test 95 at offset 126449 is less than or equal to 0.00065683. >+PASS Max error for test 96 at offset 127772 is less than or equal to 0.00065683. >+PASS Max error for test 97 at offset 129396 is less than or equal to 0.00065683. >+PASS Max error for test 98 at offset 130719 is less than or equal to 0.00065683. >+PASS Max error for test 99 at offset 132162 is less than or equal to 0.00065683. >+PASS Number of failed tests with an acceptable relative tolerance of 0.00065683 is equal to 0. >+PASS < [test] All assertions passed. (total 102 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..faf00c007b375a365bbb6b00e4051d44852d0fdc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime.html >@@ -0,0 +1,61 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioParam.setTargetAtTime >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Play a long DC signal out through an AudioGainNode, and call >+ // setValueAtTime() and setTargetAtTime at regular intervals to set the >+ // starting value and the target value. Each time interval has a ramp with >+ // a different starting and target value so that there is a discontinuity >+ // at each time interval boundary. The discontinuity is for testing >+ // timing. Also, we alternate between an increasing and decreasing ramp >+ // for each interval. >+ >+ // Number of tests to run. >+ let numberOfTests = 100; >+ >+ // Max allowed difference between the rendered data and the expected >+ // result. >+ let maxAllowedError = 6.5683e-4 >+ >+ // The AudioGainNode starts with this value instead of the default value. >+ let initialValue = 100; >+ >+ // Set the gain node value to the specified value at the specified time. >+ function setValue(value, time) { >+ gainNode.gain.setValueAtTime(value, time); >+ } >+ >+ // Generate an exponential approach starting at |startTime| with a target >+ // value of |value|. >+ function automation(value, startTime, endTime){ >+ // endTime is not used for setTargetAtTime. >+ gainNode.gain.setTargetAtTime(value, startTime, timeConstant)} >+ >+ audit.define( >+ { >+ label: 'test', >+ description: 'AudioParam setTargetAtTime() functionality.' >+ }, >+ function(task, should) { >+ createAudioGraphAndTest( >+ task, should, numberOfTests, initialValue, setValue, automation, >+ 'setTargetAtTime()', maxAllowedError, >+ createExponentialApproachArray); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e558a5c447c5be8a8c7bbf4a1d91e9b213878c7f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime-expected.txt >@@ -0,0 +1,108 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] AudioParam setValueAtTime() functionality. >+PASS Number of tests started and ended at the correct time is equal to 100. >+PASS Max error for test 0 at offset 0 is less than or equal to 6e-8. >+PASS Max error for test 1 at offset 1323 is less than or equal to 6e-8. >+PASS Max error for test 2 at offset 2646 is less than or equal to 6e-8. >+PASS Max error for test 3 at offset 3969 is less than or equal to 6e-8. >+PASS Max error for test 4 at offset 5292 is less than or equal to 6e-8. >+PASS Max error for test 5 at offset 6615 is less than or equal to 6e-8. >+PASS Max error for test 6 at offset 7938 is less than or equal to 6e-8. >+PASS Max error for test 7 at offset 9261 is less than or equal to 6e-8. >+PASS Max error for test 8 at offset 10584 is less than or equal to 6e-8. >+PASS Max error for test 9 at offset 11907 is less than or equal to 6e-8. >+PASS Max error for test 10 at offset 13230 is less than or equal to 6e-8. >+PASS Max error for test 11 at offset 14553 is less than or equal to 6e-8. >+PASS Max error for test 12 at offset 15876 is less than or equal to 6e-8. >+PASS Max error for test 13 at offset 17199 is less than or equal to 6e-8. >+PASS Max error for test 14 at offset 18522 is less than or equal to 6e-8. >+PASS Max error for test 15 at offset 19845 is less than or equal to 6e-8. >+PASS Max error for test 16 at offset 21168 is less than or equal to 6e-8. >+PASS Max error for test 17 at offset 22491 is less than or equal to 6e-8. >+PASS Max error for test 18 at offset 23814 is less than or equal to 6e-8. >+PASS Max error for test 19 at offset 25137 is less than or equal to 6e-8. >+PASS Max error for test 20 at offset 26460 is less than or equal to 6e-8. >+PASS Max error for test 21 at offset 27783 is less than or equal to 6e-8. >+PASS Max error for test 22 at offset 29106 is less than or equal to 6e-8. >+PASS Max error for test 23 at offset 30429 is less than or equal to 6e-8. >+PASS Max error for test 24 at offset 31752 is less than or equal to 6e-8. >+PASS Max error for test 25 at offset 33075 is less than or equal to 6e-8. >+PASS Max error for test 26 at offset 34398 is less than or equal to 6e-8. >+PASS Max error for test 27 at offset 35721 is less than or equal to 6e-8. >+PASS Max error for test 28 at offset 37044 is less than or equal to 6e-8. >+PASS Max error for test 29 at offset 38367 is less than or equal to 6e-8. >+PASS Max error for test 30 at offset 39690 is less than or equal to 6e-8. >+PASS Max error for test 31 at offset 41013 is less than or equal to 6e-8. >+PASS Max error for test 32 at offset 42336 is less than or equal to 6e-8. >+PASS Max error for test 33 at offset 43659 is less than or equal to 6e-8. >+PASS Max error for test 34 at offset 44982 is less than or equal to 6e-8. >+PASS Max error for test 35 at offset 46305 is less than or equal to 6e-8. >+PASS Max error for test 36 at offset 47628 is less than or equal to 6e-8. >+PASS Max error for test 37 at offset 48951 is less than or equal to 6e-8. >+PASS Max error for test 38 at offset 50274 is less than or equal to 6e-8. >+PASS Max error for test 39 at offset 51597 is less than or equal to 6e-8. >+PASS Max error for test 40 at offset 52920 is less than or equal to 6e-8. >+PASS Max error for test 41 at offset 54243 is less than or equal to 6e-8. >+PASS Max error for test 42 at offset 55566 is less than or equal to 6e-8. >+PASS Max error for test 43 at offset 56889 is less than or equal to 6e-8. >+PASS Max error for test 44 at offset 58212 is less than or equal to 6e-8. >+PASS Max error for test 45 at offset 59535 is less than or equal to 6e-8. >+PASS Max error for test 46 at offset 60858 is less than or equal to 6e-8. >+PASS Max error for test 47 at offset 62181 is less than or equal to 6e-8. >+PASS Max error for test 48 at offset 63504 is less than or equal to 6e-8. >+PASS Max error for test 49 at offset 64827 is less than or equal to 6e-8. >+PASS Max error for test 50 at offset 66150 is less than or equal to 6e-8. >+PASS Max error for test 51 at offset 67473 is less than or equal to 6e-8. >+PASS Max error for test 52 at offset 68796 is less than or equal to 6e-8. >+PASS Max error for test 53 at offset 70119 is less than or equal to 6e-8. >+PASS Max error for test 54 at offset 71442 is less than or equal to 6e-8. >+PASS Max error for test 55 at offset 72765 is less than or equal to 6e-8. >+PASS Max error for test 56 at offset 74088 is less than or equal to 6e-8. >+PASS Max error for test 57 at offset 75411 is less than or equal to 6e-8. >+PASS Max error for test 58 at offset 76734 is less than or equal to 6e-8. >+PASS Max error for test 59 at offset 78057 is less than or equal to 6e-8. >+PASS Max error for test 60 at offset 79380 is less than or equal to 6e-8. >+PASS Max error for test 61 at offset 80703 is less than or equal to 6e-8. >+PASS Max error for test 62 at offset 82026 is less than or equal to 6e-8. >+PASS Max error for test 63 at offset 83349 is less than or equal to 6e-8. >+PASS Max error for test 64 at offset 84672 is less than or equal to 6e-8. >+PASS Max error for test 65 at offset 85995 is less than or equal to 6e-8. >+PASS Max error for test 66 at offset 87318 is less than or equal to 6e-8. >+PASS Max error for test 67 at offset 88641 is less than or equal to 6e-8. >+PASS Max error for test 68 at offset 89964 is less than or equal to 6e-8. >+PASS Max error for test 69 at offset 91287 is less than or equal to 6e-8. >+PASS Max error for test 70 at offset 92610 is less than or equal to 6e-8. >+PASS Max error for test 71 at offset 93933 is less than or equal to 6e-8. >+PASS Max error for test 72 at offset 95256 is less than or equal to 6e-8. >+PASS Max error for test 73 at offset 96579 is less than or equal to 6e-8. >+PASS Max error for test 74 at offset 97902 is less than or equal to 6e-8. >+PASS Max error for test 75 at offset 99225 is less than or equal to 6e-8. >+PASS Max error for test 76 at offset 100548 is less than or equal to 6e-8. >+PASS Max error for test 77 at offset 101871 is less than or equal to 6e-8. >+PASS Max error for test 78 at offset 103194 is less than or equal to 6e-8. >+PASS Max error for test 79 at offset 104517 is less than or equal to 6e-8. >+PASS Max error for test 80 at offset 105840 is less than or equal to 6e-8. >+PASS Max error for test 81 at offset 107163 is less than or equal to 6e-8. >+PASS Max error for test 82 at offset 108486 is less than or equal to 6e-8. >+PASS Max error for test 83 at offset 109809 is less than or equal to 6e-8. >+PASS Max error for test 84 at offset 111132 is less than or equal to 6e-8. >+PASS Max error for test 85 at offset 112455 is less than or equal to 6e-8. >+PASS Max error for test 86 at offset 113778 is less than or equal to 6e-8. >+PASS Max error for test 87 at offset 115101 is less than or equal to 6e-8. >+PASS Max error for test 88 at offset 116424 is less than or equal to 6e-8. >+PASS Max error for test 89 at offset 117747 is less than or equal to 6e-8. >+PASS Max error for test 90 at offset 119070 is less than or equal to 6e-8. >+PASS Max error for test 91 at offset 120393 is less than or equal to 6e-8. >+PASS Max error for test 92 at offset 121716 is less than or equal to 6e-8. >+PASS Max error for test 93 at offset 123039 is less than or equal to 6e-8. >+PASS Max error for test 94 at offset 124362 is less than or equal to 6e-8. >+PASS Max error for test 95 at offset 125685 is less than or equal to 6e-8. >+PASS Max error for test 96 at offset 127008 is less than or equal to 6e-8. >+PASS Max error for test 97 at offset 128331 is less than or equal to 6e-8. >+PASS Max error for test 98 at offset 129654 is less than or equal to 6e-8. >+PASS Max error for test 99 at offset 130977 is less than or equal to 6e-8. >+PASS Number of failed tests with an acceptable relative tolerance of 6e-8 is equal to 0. >+PASS < [test] All assertions passed. (total 102 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ab2edfd009f1320fdb8e0a49dffb984baed36f05 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime.html >@@ -0,0 +1,57 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ audioparam-setValueAtTime.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Play a long DC signal out through an AudioGainNode, and call >+ // setValueAtTime() at regular intervals to set the value for the duration >+ // of the interval. Each time interval has different value so that there >+ // is a discontinuity at each time interval boundary. The discontinuity >+ // is for testing timing. >+ >+ // Number of tests to run. >+ let numberOfTests = 100; >+ >+ // Max allowed difference between the rendered data and the expected >+ // result. >+ let maxAllowedError = 6e-8; >+ >+ // Set the gain node value to the specified value at the specified time. >+ function setValue(value, time) { >+ gainNode.gain.setValueAtTime(value, time); >+ } >+ >+ // For testing setValueAtTime(), we don't need to do anything for >+ // automation. because the value at the beginning of the interval is set >+ // by setValue and it remains constant for the duration, which is what we >+ // want. >+ function automation(value, startTime, endTime) { >+ // Do nothing. >+ } >+ >+ audit.define( >+ { >+ label: 'test', >+ description: 'AudioParam setValueAtTime() functionality.' >+ }, >+ function(task, should) { >+ createAudioGraphAndTest( >+ task, should, numberOfTests, 1, setValue, automation, >+ 'setValueAtTime()', maxAllowedError, createConstantArray); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7db516c675f62007fe8d2afe368f30570a528996 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions-expected.txt >@@ -0,0 +1,32 @@ >+CONSOLE MESSAGE: line 201: TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering() >+ .then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [setValueCurve] >+PASS setValueCurveAtTime(curve, 0.0125, 0.0125) did not throw an exception. >+FAIL X setValueAtTime(1, 0.018750000000000003) did not throw an exception. assert_true: expected true got false >+FAIL X linearRampToValueAtTime(1, 0.018750000000000003) did not throw an exception. assert_true: expected true got false >+FAIL X exponentialRampToValueAtTime(1, 0.018750000000000003) did not throw an exception. assert_true: expected true got false >+FAIL X setTargetAtTime(1, 0.018750000000000003, 1) did not throw an exception. assert_true: expected true got false >+PASS setValueAtTime(1, 0.026250000000000002) did not throw an exception. >+FAIL < [setValueCurve] 4 out of 6 assertions were failed. assert_true: expected true got false >+PASS > [automations] >+PASS linearRampToValueAtTime(1, 0.0125) did not throw an exception. >+PASS exponentialRampToValueAtTime(1, 0.025) did not throw an exception. >+PASS setTargetAtTime(1, 0.037500000000000006, 0.1) did not throw an exception. >+PASS setValueCurveAtTime(curve, 0.05, 0.1) did not throw an exception. >+FAIL X setValueCurveAtTime(curve, 0.00625, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime(curve, 0.018750000000000003, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime(curve, 0.03125, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime(curve, 0.043750000000000004, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime([NaN, NaN], 0.043750000000000004, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime([1, Infinity], 0.043750000000000004, 0.01) did not throw an exception. assert_true: expected true got false >+PASS delayTime.setValueCurveAtTime([1, 5], 0.043750000000000004, 0.01) did not throw an exception. >+FAIL X delayTime.setValueCurveAtTime([1, 5, Infinity], 0.043750000000000004, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL X setValueCurveAtTime(curve, 0.031415926535897934, 0.01) did not throw an exception. assert_true: expected true got false >+FAIL < [automations] 8 out of 13 assertions were failed. assert_true: expected true got false >+PASS > [catch-exception] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html >new file mode 100644 >index 0000000000000000000000000000000000000000..590dcbd5a29be09b3be88cae1b89d545df7fe5c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html >@@ -0,0 +1,320 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Exceptions from setValueCurveAtTime >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 48000; >+ // Some short duration because we don't need to run the test for very >+ // long. >+ let testDurationSec = 0.125; >+ let testDurationFrames = testDurationSec * sampleRate; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('setValueCurve', (task, should) => { >+ let success = true; >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ let g = context.createGain(); >+ let curve = new Float32Array(2); >+ >+ // Start time and duration for setValueCurveAtTime >+ let curveStartTime = 0.1 * testDurationSec; >+ let duration = 0.1 * testDurationSec; >+ >+ // Some time that is known to during the setValueCurveTime interval. >+ let automationTime = curveStartTime + duration / 2; >+ >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, curveStartTime, duration); >+ }, >+ 'setValueCurveAtTime(curve, ' + curveStartTime + ', ' + duration + >+ ')') >+ .notThrow(); >+ >+ should( >+ function() { >+ g.gain.setValueAtTime(1, automationTime); >+ }, >+ 'setValueAtTime(1, ' + automationTime + ')') >+ .throw('NotSupportedError'); >+ >+ should( >+ function() { >+ g.gain.linearRampToValueAtTime(1, automationTime); >+ }, >+ 'linearRampToValueAtTime(1, ' + automationTime + ')') >+ .throw('NotSupportedError'); >+ >+ should( >+ function() { >+ g.gain.exponentialRampToValueAtTime(1, automationTime); >+ }, >+ 'exponentialRampToValueAtTime(1, ' + automationTime + ')') >+ .throw('NotSupportedError'); >+ >+ should( >+ function() { >+ g.gain.setTargetAtTime(1, automationTime, 1); >+ }, >+ 'setTargetAtTime(1, ' + automationTime + ', 1)') >+ .throw('NotSupportedError'); >+ >+ should( >+ function() { >+ g.gain.setValueAtTime(1, curveStartTime + 1.1 * duration); >+ }, >+ 'setValueAtTime(1, ' + (curveStartTime + 1.1 * duration) + ')') >+ .notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.define('automations', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ let g = context.createGain(); >+ >+ let curve = new Float32Array(2); >+ // Start time and duration for setValueCurveAtTime >+ let startTime = 0; >+ let timeInterval = testDurationSec / 10; >+ let time; >+ >+ startTime += timeInterval; >+ should(() => { >+ g.gain.linearRampToValueAtTime(1, startTime); >+ }, 'linearRampToValueAtTime(1, ' + startTime + ')').notThrow(); >+ >+ startTime += timeInterval; >+ should(() => { >+ g.gain.exponentialRampToValueAtTime(1, startTime); >+ }, 'exponentialRampToValueAtTime(1, ' + startTime + ')').notThrow(); >+ >+ startTime += timeInterval; >+ should(() => { >+ g.gain.setTargetAtTime(1, startTime, 0.1); >+ }, 'setTargetAtTime(1, ' + startTime + ', 0.1)').notThrow(); >+ >+ startTime += timeInterval; >+ should(() => { >+ g.gain.setValueCurveAtTime(curve, startTime, 0.1); >+ }, 'setValueCurveAtTime(curve, ' + startTime + ', 0.1)').notThrow(); >+ >+ // Now try to setValueCurve that overlaps each of the above automations >+ startTime = timeInterval / 2; >+ >+ for (let k = 0; k < 4; ++k) { >+ time = startTime + timeInterval * k; >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, 0.01); >+ }, >+ 'setValueCurveAtTime(curve, ' + time + ', 0.01)') >+ .throw('NotSupportedError'); >+ } >+ >+ // Elements of setValueCurve should be finite. >+ should( >+ () => { >+ g.gain.setValueCurveAtTime( >+ Float32Array.from([NaN, NaN]), time, 0.01); >+ }, >+ 'setValueCurveAtTime([NaN, NaN], ' + time + ', 0.01)') >+ .throw('TypeError'); >+ >+ should( >+ () => { >+ g.gain.setValueCurveAtTime( >+ Float32Array.from([1, Infinity]), time, 0.01); >+ }, >+ 'setValueCurveAtTime([1, Infinity], ' + time + ', 0.01)') >+ .throw('TypeError'); >+ >+ let d = context.createDelay(); >+ // Check that we get warnings for out-of-range values and also throw for >+ // non-finite values. >+ should( >+ () => { >+ d.delayTime.setValueCurveAtTime( >+ Float32Array.from([1, 5]), time, 0.01); >+ }, >+ 'delayTime.setValueCurveAtTime([1, 5], ' + time + ', 0.01)') >+ .notThrow(); >+ >+ should( >+ () => { >+ d.delayTime.setValueCurveAtTime( >+ Float32Array.from([1, 5, Infinity]), time, 0.01); >+ }, >+ 'delayTime.setValueCurveAtTime([1, 5, Infinity], ' + time + >+ ', 0.01)') >+ .throw('TypeError'); >+ >+ // One last test that prints out lots of digits for the time. >+ time = Math.PI / 100; >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, 0.01); >+ }, >+ 'setValueCurveAtTime(curve, ' + time + ', 0.01)') >+ .throw('NotSupportedError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('catch-exception', (task, should) => { >+ // Verify that the curve isn't inserted into the time line even if we >+ // catch the exception. >+ let success = true; >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ let gain = context.createGain(); >+ let source = context.createBufferSource(); >+ let buffer = context.createBuffer(1, 1, context.sampleRate); >+ buffer.getChannelData(0)[0] = 1; >+ source.buffer = buffer; >+ source.loop = true; >+ >+ source.connect(gain); >+ gain.connect(context.destination); >+ >+ gain.gain.setValueAtTime(1, 0); >+ try { >+ // The value curve has an invalid element. This automation shouldn't >+ // be inserted into the timeline at all. >+ gain.gain.setValueCurveAtTime( >+ Float32Array.from([0, NaN]), 128 / context.sampleRate, .5); >+ } catch (e) { >+ }; >+ source.start(); >+ >+ context.startRendering() >+ .then(function(resultBuffer) { >+ // Since the setValueCurve wasn't inserted, the output should be >+ // exactly 1 for the entire duration. >+ should( >+ resultBuffer.getChannelData(0), >+ 'Handled setValueCurve exception so output') >+ .beConstantValueOf(1); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.define('start-end', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ let g = context.createGain(); >+ let curve = new Float32Array(2); >+ >+ // Verify that a setValueCurve can start at the end of an automation. >+ let time = 0; >+ let timeInterval = testDurationSec / 50; >+ should(() => { >+ g.gain.setValueAtTime(1, time); >+ }, 'setValueAtTime(1, ' + time + ')').notThrow(); >+ >+ time += timeInterval; >+ should(() => { >+ g.gain.linearRampToValueAtTime(0, time); >+ }, 'linearRampToValueAtTime(0, ' + time + ')').notThrow(); >+ >+ // setValueCurve starts at the end of the linear ramp. This should be >+ // fine. >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, timeInterval); >+ }, >+ 'setValueCurveAtTime(..., ' + time + ', ' + timeInterval + ')') >+ .notThrow(); >+ >+ // exponentialRamp ending one interval past the setValueCurve should be >+ // fine. >+ time += 2 * timeInterval; >+ should(() => { >+ g.gain.exponentialRampToValueAtTime(1, time); >+ }, 'exponentialRampToValueAtTime(1, ' + time + ')').notThrow(); >+ >+ // setValueCurve starts at the end of the exponential ramp. This should >+ // be fine. >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, timeInterval); >+ }, >+ 'setValueCurveAtTime(..., ' + time + ', ' + timeInterval + ')') >+ .notThrow(); >+ >+ // setValueCurve at the end of the setValueCurve should be fine. >+ time += timeInterval; >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, timeInterval); >+ }, >+ 'setValueCurveAtTime(..., ' + time + ', ' + timeInterval + ')') >+ .notThrow(); >+ >+ // setValueAtTime at the end of setValueCurve should be fine. >+ time += timeInterval; >+ should(() => { >+ g.gain.setValueAtTime(0, time); >+ }, 'setValueAtTime(0, ' + time + ')').notThrow(); >+ >+ // setValueCurve at the end of setValueAtTime should be fine. >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(curve, time, timeInterval); >+ }, >+ 'setValueCurveAtTime(..., ' + time + ', ' + timeInterval + ')') >+ .notThrow(); >+ >+ // setTarget starting at the end of setValueCurve should be fine. >+ time += timeInterval; >+ should(() => { >+ g.gain.setTargetAtTime(1, time, 1); >+ }, 'setTargetAtTime(1, ' + time + ', 1)').notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.define('curve lengths', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ let g = context.createGain(); >+ let time = 0; >+ >+ // Check for invalid curve lengths >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(Float32Array.from([]), time, 0.01); >+ }, >+ 'setValueCurveAtTime([], ' + time + ', 0.01)') >+ .throw('InvalidStateError'); >+ >+ should( >+ () => { >+ g.gain.setValueCurveAtTime(Float32Array.from([1]), time, 0.01); >+ }, >+ 'setValueCurveAtTime([1], ' + time + ', 0.01)') >+ .throw('InvalidStateError'); >+ >+ should(() => { >+ g.gain.setValueCurveAtTime(Float32Array.from([1, 2]), time, 0.01); >+ }, 'setValueCurveAtTime([1,2], ' + time + ', 0.01)').notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e0cd64b3ab998f3930f8b9344194601cb348c6a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime-expected.txt >@@ -0,0 +1,28 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] AudioParam setValueCurveAtTime() functionality. >+PASS Number of tests started and ended at the correct time is equal to 20. >+FAIL X Max error for test 0 at offset 1304 is not less than or equal to 0.0000037194. Got 0.030871472751557993. assert_true: expected true got false >+FAIL X Max error for test 1 at offset 2627 is not less than or equal to 0.0000037194. Got 0.030871472751557993. assert_true: expected true got false >+FAIL X Max error for test 2 at offset 3950 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 3 at offset 5273 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 4 at offset 6596 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 5 at offset 7919 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 6 at offset 9242 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 7 at offset 10565 is not less than or equal to 0.0000037194. Got 0.030871472751543783. assert_true: expected true got false >+FAIL X Max error for test 8 at offset 11888 is not less than or equal to 0.0000037194. Got 0.030871472751586526. assert_true: expected true got false >+FAIL X Max error for test 9 at offset 13211 is not less than or equal to 0.0000037194. Got 0.03087147275151525. assert_true: expected true got false >+FAIL X Max error for test 10 at offset 14534 is not less than or equal to 0.0000037194. Got 0.03087147275151525. assert_true: expected true got false >+FAIL X Max error for test 11 at offset 15857 is not less than or equal to 0.0000037194. Got 0.030871472751508144. assert_true: expected true got false >+FAIL X Max error for test 12 at offset 17180 is not less than or equal to 0.0000037194. Got 0.030871472751586526. assert_true: expected true got false >+FAIL X Max error for test 13 at offset 18503 is not less than or equal to 0.0000037194. Got 0.03087147275151525. assert_true: expected true got false >+FAIL X Max error for test 14 at offset 19826 is not less than or equal to 0.0000037194. Got 0.03087147275151525. assert_true: expected true got false >+FAIL X Max error for test 15 at offset 21149 is not less than or equal to 0.0000037194. Got 0.030871472751508144. assert_true: expected true got false >+FAIL X Max error for test 16 at offset 22472 is not less than or equal to 0.0000037194. Got 0.030871472751586526. assert_true: expected true got false >+FAIL X Max error for test 17 at offset 23795 is not less than or equal to 0.0000037194. Got 0.030871472751586526. assert_true: expected true got false >+FAIL X Max error for test 18 at offset 25118 is not less than or equal to 0.0000037194. Got 0.03087147275143698. assert_true: expected true got false >+FAIL X Max error for test 19 at offset 26441 is not less than or equal to 0.0000037194. Got 0.030871472751586526. assert_true: expected true got false >+PASS Number of failed tests with an acceptable relative tolerance of 0.0000037194 is equal to 0. >+FAIL < [test] 20 out of 22 assertions were failed. assert_true: expected true got false >+FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html >new file mode 100644 >index 0000000000000000000000000000000000000000..de8406244bc386981c0527629e3685f250c6a659 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioParam.setValueCurveAtTime >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Play a long DC signal out through an AudioGainNode and for each time >+ // interval call setValueCurveAtTime() to set the values for the duration >+ // of the interval. Each curve is a sine wave, and we assume that the >+ // time interval is not an exact multiple of the period. This causes a >+ // discontinuity between time intervals which is used to test timing. >+ >+ // Number of tests to run. >+ let numberOfTests = 20; >+ >+ // Max allowed difference between the rendered data and the expected >+ // result. Because of the linear interpolation, the rendered curve isn't >+ // exactly the same as the reference. This value is experimentally >+ // determined. >+ let maxAllowedError = 3.7194e-6; >+ >+ // The amplitude of the sine wave. >+ let sineAmplitude = 1; >+ >+ // Frequency of the sine wave. >+ let freqHz = 440; >+ >+ // Curve to use for setValueCurveAtTime(). >+ let curve; >+ >+ // Sets the curve data for the entire time interval. >+ function automation(value, startTime, endTime) { >+ gainNode.gain.setValueCurveAtTime( >+ curve, startTime, endTime - startTime); >+ } >+ >+ audit.define( >+ { >+ label: 'test', >+ description: 'AudioParam setValueCurveAtTime() functionality.' >+ }, >+ function(task, should) { >+ // The curve of values to use. >+ curve = createSineWaveArray( >+ timeInterval, freqHz, sineAmplitude, sampleRate); >+ >+ createAudioGraphAndTest( >+ task, should, numberOfTests, sineAmplitude, >+ function(k) { >+ // Don't need to set the value. >+ }, >+ automation, 'setValueCurveAtTime()', maxAllowedError, >+ createReferenceSineArray, >+ 2 * Math.PI * sineAmplitude * freqHz / sampleRate, >+ differenceErrorMetric); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f9ab1812fc5e4d97a92ec16250103b5e717f8f8e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 111: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9084942f7032cd00d9d57b8d4d1f6ba2742ab57f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction.html >@@ -0,0 +1,120 @@ >+<!DOCTYPE html> >+<!-- >+Tests that multiple audio-rate signals (AudioNode outputs) can be connected to an AudioParam >+and that these signals are summed, along with the AudioParams intrinsic value. >+--> >+<html> >+ <head> >+ <title> >+ audioparam-summingjunction.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/mix-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ let sampleRate = 44100.0; >+ let lengthInSeconds = 1; >+ >+ let context = 0; >+ >+ // Buffers used by the two gain controlling sources. >+ let linearRampBuffer; >+ let toneBuffer; >+ let toneFrequency = 440; >+ >+ // Arbitrary non-zero value. >+ let baselineGain = 5; >+ >+ // Allow for a small round-off error. >+ let maxAllowedError = 1e-6; >+ >+ function checkResult(renderedBuffer, should) { >+ let renderedData = renderedBuffer.getChannelData(0); >+ >+ // Get buffer data from the two sources used to control gain. >+ let linearRampData = linearRampBuffer.getChannelData(0); >+ let toneData = toneBuffer.getChannelData(0); >+ >+ let n = renderedBuffer.length; >+ >+ should(n, 'Rendered signal length').beEqualTo(linearRampBuffer.length); >+ >+ // Check that the rendered result exactly matches the sum of the >+ // intrinsic gain plus the two sources used to control gain. This is >+ // because we're changing the gain of a signal having constant value 1. >+ let success = true; >+ for (let i = 0; i < n; ++i) { >+ let expectedValue = baselineGain + linearRampData[i] + toneData[i]; >+ let error = Math.abs(expectedValue - renderedData[i]); >+ >+ if (error > maxAllowedError) { >+ success = false; >+ break; >+ } >+ } >+ >+ should( >+ success, >+ 'Rendered signal matches sum of two audio-rate gain changing signals plus baseline gain') >+ .beTrue(); >+ } >+ >+ audit.define('test', function(task, should) { >+ let sampleFrameLength = sampleRate * lengthInSeconds; >+ >+ // Create offline audio context. >+ context = new OfflineAudioContext(1, sampleFrameLength, sampleRate); >+ >+ // Create buffer used by the source which will have its gain controlled. >+ let constantOneBuffer = >+ createConstantBuffer(context, sampleFrameLength, 1); >+ let constantSource = context.createBufferSource(); >+ constantSource.buffer = constantOneBuffer; >+ >+ // Create 1st buffer used to control gain (a linear ramp). >+ linearRampBuffer = createLinearRampBuffer(context, sampleFrameLength); >+ let gainSource1 = context.createBufferSource(); >+ gainSource1.buffer = linearRampBuffer; >+ >+ // Create 2st buffer used to control gain (a simple sine wave tone). >+ toneBuffer = >+ createToneBuffer(context, toneFrequency, lengthInSeconds, 1); >+ let gainSource2 = context.createBufferSource(); >+ gainSource2.buffer = toneBuffer; >+ >+ // Create a gain node controlling the gain of constantSource and make >+ // the connections. >+ let gainNode = context.createGain(); >+ >+ // Intrinsic baseline gain. >+ // This gain value should be summed with gainSource1 and gainSource2. >+ gainNode.gain.value = baselineGain; >+ >+ constantSource.connect(gainNode); >+ gainNode.connect(context.destination); >+ >+ // Connect two audio-rate signals to control the .gain AudioParam. >+ gainSource1.connect(gainNode.gain); >+ gainSource2.connect(gainNode.gain); >+ >+ // Start all sources at time 0. >+ constantSource.start(0); >+ gainSource1.start(0); >+ gainSource2.start(0); >+ >+ context.startRendering().then(buffer => { >+ checkResult(buffer, should); >+ task.done(); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..52d6e4b8d0585bf5604ffb6df20f927889f7ccdf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 94: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [AudioBufferSourceNode] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js >new file mode 100644 >index 0000000000000000000000000000000000000000..46d9d4a6e0c2fbe460b0398ab806450a9d5798ef >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js >@@ -0,0 +1,117 @@ >+// Test k-rate vs a-rate AudioParams. >+// >+// |options| describes how the testing of the AudioParam should be done: >+// >+// nodeName: name of the AudioNode to be tested >+// nodeOptions: options to be used in the AudioNode constructor >+// >+// prefix: Prefix for all output messages (to make them unique for >+// testharness) >+// >+// rateSettings: A vector of dictionaries specifying how to set the automation >+// rate(s): >+// name: Name of the AudioParam >+// value: The automation rate for the AudioParam given by |name|. >+// >+// automations: A vector of dictionaries specifying how to automate each >+// AudioParam: >+// name: Name of the AudioParam >+// >+// methods: A vector of dictionaries specifying the automation methods to >+// be used for testing: >+// name: Automation method to call >+// options: Arguments for the automation method >+// >+// Testing is somewhat rudimentary. We create two nodes of the same type. One >+// node uses the default automation rates for each AudioParam (expecting them to >+// be a-rate). The second node sets the automation rate of AudioParams to >+// "k-rate". The set is speciified by |options.rateSettings|. >+// >+// For both of these nodes, the same set of automation methods (given by >+// |options.automations|) is applied. A simple oscillator is connected to each >+// node which in turn are connected to different channels of an offline context. >+// Channel 0 is the k-rate node output; channel 1, the a-rate output; and >+// channel 3, the difference between the outputs. >+// >+// Success is declared if the difference signal is not exactly zero. This means >+// the the automations did different things, as expected. >+// >+// The promise from |startRendering| is returned. >+function doTest(context, should, options) { >+ let merger = new ChannelMergerNode( >+ context, {numberOfInputs: context.destination.numberOfChannels}); >+ merger.connect(context.destination); >+ >+ let src = new OscillatorNode(context); >+ let kRateNode = new window[options.nodeName](context, options.nodeOptions); >+ let aRateNode = new window[options.nodeName](context, options.nodeOptions); >+ let inverter = new GainNode(context, {gain: -1}); >+ >+ // Set kRateNode filter to use k-rate params. >+ options.rateSettings.forEach(setting => { >+ kRateNode[setting.name].automationRate = setting.value; >+ // Mostly for documentation in the output. These should always >+ // pass. >+ should( >+ kRateNode[setting.name].automationRate, >+ `${options.prefix}: Setting ${ >+ setting.name >+ }.automationRate to "${setting.value}"`) >+ .beEqualTo(setting.value); >+ }); >+ >+ // Run through all automations for each node separately. (Mostly to keep >+ // output of automations together.) >+ options.automations.forEach(param => { >+ param.methods.forEach(method => { >+ // Most for documentation in the output. These should never throw. >+ let message = `${param.name}.${method.name}(${method.options})` >+ should(() => { >+ kRateNode[param.name][method.name](...method.options); >+ }, options.prefix + ': k-rate node: ' + message).notThrow(); >+ }); >+ }); >+ options.automations.forEach(param => { >+ param.methods.forEach(method => { >+ // Most for documentation in the output. These should never throw. >+ let message = `${param.name}.${method.name}(${method.options})` >+ should(() => { >+ aRateNode[param.name][method.name](...method.options); >+ }, options.prefix + ': a-rate node:' + message).notThrow(); >+ }); >+ }); >+ >+ // The k-rate result is channel 0, and the a-rate result is channel 1. >+ src.connect(kRateNode).connect(merger, 0, 0); >+ src.connect(aRateNode).connect(merger, 0, 1); >+ >+ // Compute the difference between the a-rate and k-rate results and send >+ // that to channel 2. >+ kRateNode.connect(merger, 0, 2); >+ aRateNode.connect(inverter).connect(merger, 0, 2); >+ >+ src.start(); >+ return context.startRendering().then(renderedBuffer => { >+ let kRateOutput = renderedBuffer.getChannelData(0); >+ let aRateOutput = renderedBuffer.getChannelData(1); >+ let diff = renderedBuffer.getChannelData(2); >+ >+ // Some informative messages to print out values of the k-rate and >+ // a-rate outputs. These should always pass. >+ should( >+ kRateOutput, `${options.prefix}: Output of k-rate ${options.nodeName}`) >+ .beEqualToArray(kRateOutput); >+ should( >+ aRateOutput, `${options.prefix}: Output of a-rate ${options.nodeName}`) >+ .beEqualToArray(aRateOutput); >+ >+ // The real test. If k-rate AudioParam is working correctly, the >+ // k-rate result MUST differ from the a-rate result. >+ should( >+ diff, >+ `${ >+ options.prefix >+ }: Difference between a-rate and k-rate ${options.nodeName}`) >+ .notBeConstantValueOf(0); >+ }); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a3c789e2f2cbdb31e540bf5cc58850786b4ed73b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html >@@ -0,0 +1,167 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>AudioParam.automationRate tests</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ // For each node that has an AudioParam, verify that the default >+ // |automationRate| has the expected value and that we can change it or >+ // throw an error if it can't be changed. >+ >+ // Any valid sample rate is fine; we don't actually render anything in the >+ // tests. >+ let sampleRate = 8000; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // Array of tests. Each test is a dictonary consisting of the name of the >+ // node and an array specifying the AudioParam's of the node. This array >+ // in turn gives the name of the AudioParam, the default value for the >+ // |automationRate|, and whether it is fixed (isFixed). >+ const tests = [ >+ { >+ nodeName: 'AudioBufferSourceNode', >+ audioParams: [ >+ {name: 'detune', defaultRate: 'k-rate', isFixed: true}, >+ {name: 'playbackRate', defaultRate: 'k-rate', isFixed: true} >+ ] >+ }, >+ { >+ nodeName: 'BiquadFilterNode', >+ audioParams: [ >+ {name: 'frequency', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'detune', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'Q', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'gain', defaultRate: 'a-rate', isFixed: false}, >+ ] >+ }, >+ { >+ nodeName: 'ConstantSourceNode', >+ audioParams: [{name: 'offset', defaultRate: 'a-rate', isFixed: false}] >+ }, >+ { >+ nodeName: 'DelayNode', >+ audioParams: >+ [{name: 'delayTime', defaultRate: 'a-rate', isFixed: false}] >+ }, >+ { >+ nodeName: 'DynamicsCompressorNode', >+ audioParams: [ >+ {name: 'threshold', defaultRate: 'k-rate', isFixed: true}, >+ {name: 'knee', defaultRate: 'k-rate', isFixed: true}, >+ {name: 'ratio', defaultRate: 'k-rate', isFixed: true}, >+ {name: 'attack', defaultRate: 'k-rate', isFixed: true}, >+ {name: 'release', defaultRate: 'k-rate', isFixed: true} >+ ] >+ }, >+ { >+ nodeName: 'GainNode', >+ audioParams: [{name: 'gain', defaultRate: 'a-rate', isFixed: false}] >+ }, >+ { >+ nodeName: 'OscillatorNode', >+ audioParams: [ >+ {name: 'frequency', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'detune', defaultRate: 'a-rate', isFixed: false} >+ ] >+ }, >+ { >+ nodeName: 'PannerNode', >+ audioParams: [ >+ {name: 'positionX', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'positionY', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'positionZ', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'orientationX', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'orientationY', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'orientationZ', defaultRate: 'a-rate', isFixed: false}, >+ ] >+ }, >+ { >+ nodeName: 'StereoPannerNode', >+ audioParams: [{name: 'pan', defaultRate: 'a-rate', isFixed: false}] >+ }, >+ ]; >+ >+ tests.forEach(test => { >+ // Define a separate test for each test entry. >+ audit.define(test.nodeName, (task, should) => { >+ let context = new OfflineAudioContext( >+ {length: sampleRate, sampleRate: sampleRate}); >+ // Construct the node and test each AudioParam of the node. >+ let node = new window[test.nodeName](context); >+ test.audioParams.forEach(param => { >+ testAudioParam( >+ should, {nodeName: test.nodeName, node: node, param: param}); >+ }); >+ >+ task.done(); >+ }); >+ }); >+ >+ // AudioListener needs it's own special test since it's not a node. >+ audit.define('AudioListener', (task, should) => { >+ let context = new OfflineAudioContext( >+ {length: sampleRate, sampleRate: sampleRate}); >+ >+ [{name: 'positionX', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'positionY', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'positionZ', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'forwardX', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'forwardY', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'forwardZ', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'upX', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'upY', defaultRate: 'a-rate', isFixed: false}, >+ {name: 'upZ', defaultRate: 'a-rate', isFixed: false}, >+ ].forEach(param => { >+ testAudioParam(should, { >+ nodeName: 'AudioListener', >+ node: context.listener, >+ param: param >+ }); >+ }); >+ task.done(); >+ }); >+ >+ audit.run(); >+ >+ function testAudioParam(should, options) { >+ let param = options.param; >+ let audioParam = options.node[param.name]; >+ let defaultRate = param.defaultRate; >+ >+ // Verify that the default value is correct. >+ should( >+ audioParam.automationRate, >+ `Default ${options.nodeName}.${param.name}.automationRate`) >+ .beEqualTo(defaultRate); >+ >+ // Try setting the rate to a different rate. If the |automationRate| >+ // is fixed, expect an error. Otherwise, expect no error and expect >+ // the value is changed to the new value. >+ let newRate = defaultRate === 'a-rate' ? 'k-rate' : 'a-rate'; >+ let setMessage = `Set ${ >+ options.nodeName >+ }.${param.name}.automationRate to "${newRate}"` >+ >+ if (param.isFixed) { >+ should(() => audioParam.automationRate = newRate, setMessage) >+ .throw('InvalidStateError'); >+ } >+ else { >+ should(() => audioParam.automationRate = newRate, setMessage) >+ .notThrow(); >+ should( >+ audioParam.automationRate, >+ `${options.nodeName}.${param.name}.automationRate`) >+ .beEqualTo(newRate); >+ } >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..33d9944619560512b7587e2c02088071056c2177 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 24: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Insert same event at same time] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html >new file mode 100644 >index 0000000000000000000000000000000000000000..eab77c494d1161083f1fe73376492b177355995f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html >@@ -0,0 +1,314 @@ >+<!doctype html> >+<html> >+ <head> >+ <title> >+ Test Handling of Event Insertion >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audio-param.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Use a power of two for the sample rate so there's no round-off in >+ // computing time from frame. >+ let sampleRate = 16384; >+ >+ audit.define( >+ {label: 'Insert same event at same time'}, (task, should) => { >+ // Context for testing. >+ let context = new OfflineAudioContext( >+ {length: 16384, sampleRate: sampleRate}); >+ >+ // The source node to use. Automations will be scheduled here. >+ let src = new ConstantSourceNode(context, {offset: 0}); >+ src.connect(context.destination); >+ >+ // An array of tests to be done. Each entry specifies the event >+ // type and the event time. The events are inserted in the order >+ // given (in |values|), and the second event should replace the >+ // first, as required by the spec. >+ let testCases = [ >+ { >+ event: 'setValueAtTime', >+ frame: RENDER_QUANTUM_FRAMES, >+ values: [99, 1], >+ outputTestFrame: RENDER_QUANTUM_FRAMES, >+ expectedOutputValue: 1 >+ }, >+ { >+ event: 'linearRampToValueAtTime', >+ frame: 2 * RENDER_QUANTUM_FRAMES, >+ values: [99, 2], >+ outputTestFrame: 2 * RENDER_QUANTUM_FRAMES, >+ expectedOutputValue: 2 >+ }, >+ { >+ event: 'exponentialRampToValueAtTime', >+ frame: 3 * RENDER_QUANTUM_FRAMES, >+ values: [99, 3], >+ outputTestFrame: 3 * RENDER_QUANTUM_FRAMES, >+ expectedOutputValue: 3 >+ }, >+ { >+ event: 'setValueCurveAtTime', >+ frame: 3 * RENDER_QUANTUM_FRAMES, >+ values: [[98, 99], [3, 4]], >+ extraArgs: RENDER_QUANTUM_FRAMES / context.sampleRate, >+ outputTestFrame: 4 * RENDER_QUANTUM_FRAMES, >+ expectedOutputValue: 4 >+ } >+ ]; >+ >+ testCases.forEach(entry => { >+ entry.values.forEach(value => { >+ let eventTime = entry.frame / context.sampleRate; >+ let message = eventToString( >+ entry.event, value, eventTime, entry.extraArgs); >+ // This is mostly to print out the event that is getting >+ // inserted. It should never ever throw. >+ should(() => { >+ src.offset[entry.event](value, eventTime, entry.extraArgs); >+ }, message).notThrow(); >+ }); >+ }); >+ >+ src.start(); >+ >+ context.startRendering() >+ .then(audioBuffer => { >+ let audio = audioBuffer.getChannelData(0); >+ >+ // Look through the test cases to figure out what the correct >+ // output values should be. >+ testCases.forEach(entry => { >+ let expected = entry.expectedOutputValue; >+ let frame = entry.outputTestFrame; >+ let time = frame / context.sampleRate; >+ should( >+ audio[frame], `Output at frame ${frame} (time ${time})`) >+ .beEqualTo(expected); >+ }); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.define( >+ { >+ label: 'Linear + Expo', >+ description: 'Different events at same time' >+ }, >+ (task, should) => { >+ // Should be a linear ramp up to the event time, and after a >+ // constant value because the exponential ramp has ended. >+ let testCase = [ >+ {event: 'linearRampToValueAtTime', value: 2, relError: 0}, >+ {event: 'setValueAtTime', value: 99}, >+ {event: 'exponentialRampToValueAtTime', value: 3}, >+ ]; >+ let eventFrame = 2 * RENDER_QUANTUM_FRAMES; >+ let prefix = 'Linear+Expo: '; >+ >+ testEventInsertion(prefix, should, eventFrame, testCase) >+ .then(expectConstant(prefix, should, eventFrame, testCase)) >+ .then(() => task.done()); >+ }); >+ >+ audit.define( >+ { >+ label: 'Expo + Linear', >+ description: 'Different events at same time', >+ }, >+ (task, should) => { >+ // Should be an exponential ramp up to the event time, and after a >+ // constant value because the linear ramp has ended. >+ let testCase = [ >+ { >+ event: 'exponentialRampToValueAtTime', >+ value: 3, >+ relError: 4.2533e-6 >+ }, >+ {event: 'setValueAtTime', value: 99}, >+ {event: 'linearRampToValueAtTime', value: 2}, >+ ]; >+ let eventFrame = 2 * RENDER_QUANTUM_FRAMES; >+ let prefix = 'Expo+Linear: '; >+ >+ testEventInsertion(prefix, should, eventFrame, testCase) >+ .then(expectConstant(prefix, should, eventFrame, testCase)) >+ .then(() => task.done()); >+ }); >+ >+ audit.define( >+ { >+ label: 'Linear + SetTarget', >+ description: 'Different events at same time', >+ }, >+ (task, should) => { >+ // Should be a linear ramp up to the event time, and then a >+ // decaying value. >+ let testCase = [ >+ {event: 'linearRampToValueAtTime', value: 3, relError: 0}, >+ {event: 'setValueAtTime', value: 100}, >+ {event: 'setTargetAtTime', value: 0, extraArgs: 0.1}, >+ ]; >+ let eventFrame = 2 * RENDER_QUANTUM_FRAMES; >+ let prefix = 'Linear+SetTarget: '; >+ >+ testEventInsertion(prefix, should, eventFrame, testCase) >+ .then(audioBuffer => { >+ let audio = audioBuffer.getChannelData(0); >+ let prefix = 'Linear+SetTarget: '; >+ let eventTime = eventFrame / sampleRate; >+ let expectedValue = methodMap[testCase[0].event]( >+ (eventFrame - 1) / sampleRate, 1, 0, testCase[0].value, >+ eventTime); >+ should( >+ audio[eventFrame - 1], >+ prefix + >+ `At time ${ >+ (eventFrame - 1) / sampleRate >+ } (frame ${eventFrame - 1}) output`) >+ .beCloseTo( >+ expectedValue, >+ {threshold: testCase[0].relError || 0}); >+ >+ // The setValue should have taken effect >+ should( >+ audio[eventFrame], >+ prefix + >+ `At time ${eventTime} (frame ${eventFrame}) output`) >+ .beEqualTo(testCase[1].value); >+ >+ // The final event is setTarget. Compute the expected output. >+ let actual = audio.slice(eventFrame); >+ let expected = new Float32Array(actual.length); >+ for (let k = 0; k < expected.length; ++k) { >+ let t = (eventFrame + k) / sampleRate; >+ expected[k] = audioParamSetTarget( >+ t, testCase[1].value, eventTime, testCase[2].value, >+ testCase[2].extraArgs); >+ } >+ should( >+ actual, >+ prefix + >+ `At time ${eventTime} (frame ${ >+ eventFrame >+ }) and later`) >+ .beCloseToArray(expected, {relativeThreshold: 1.7807e-7}); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ >+ audit.run(); >+ >+ // Takes a list of |testCases| consisting of automation methods and >+ // schedules them to occur at |eventFrame|. |prefix| is a prefix for >+ // messages produced by |should|. >+ // >+ // Each item in |testCases| is a dictionary with members: >+ // event - the name of automation method to be inserted, >+ // value - the value for the event, >+ // extraArgs - extra arguments if the event needs more than the value >+ // and time (such as setTargetAtTime). >+ function testEventInsertion(prefix, should, eventFrame, testCases) { >+ let context = new OfflineAudioContext( >+ {length: 4 * RENDER_QUANTUM_FRAMES, sampleRate: sampleRate}); >+ >+ // The source node to use. Automations will be scheduled here. >+ let src = new ConstantSourceNode(context, {offset: 0}); >+ src.connect(context.destination); >+ >+ // Initialize value to 1 at the beginning. >+ src.offset.setValueAtTime(1, 0); >+ >+ // Test automations have this event time. >+ let eventTime = eventFrame / context.sampleRate; >+ >+ // Sanity check that context is long enough for the test >+ should( >+ eventFrame < context.length, >+ prefix + 'Context length is long enough for the test') >+ .beTrue(); >+ >+ // Automations to be tested. The first event should be the actual >+ // output up to the event time. The last event should be the final >+ // output from the event time and onwards. >+ testCases.forEach(entry => { >+ should( >+ () => { >+ src.offset[entry.event]( >+ entry.value, eventTime, entry.extraArgs); >+ }, >+ prefix + >+ eventToString( >+ entry.event, entry.value, eventTime, entry.extraArgs)) >+ .notThrow(); >+ }); >+ >+ src.start(); >+ >+ return context.startRendering(); >+ } >+ >+ // Verify output of test where the final value of the automation is >+ // expected to be constant. >+ function expectConstant(prefix, should, eventFrame, testCases) { >+ return audioBuffer => { >+ let audio = audioBuffer.getChannelData(0); >+ >+ let eventTime = eventFrame / sampleRate; >+ >+ // Compute the expected value of the first automation one frame before >+ // the event time. This is a quick check that the correct automation >+ // was done. >+ let expectedValue = methodMap[testCases[0].event]( >+ (eventFrame - 1) / sampleRate, 1, 0, testCases[0].value, >+ eventTime); >+ should( >+ audio[eventFrame - 1], >+ prefix + >+ `At time ${ >+ (eventFrame - 1) / sampleRate >+ } (frame ${eventFrame - 1}) output`) >+ .beCloseTo(expectedValue, {threshold: testCases[0].relError}); >+ >+ // The last event scheduled is expected to set the value for all >+ // future times. Verify that the output has the expected value. >+ should( >+ audio.slice(eventFrame), >+ prefix + >+ `At time ${eventTime} (frame ${ >+ eventFrame >+ }) and later, output`) >+ .beConstantValueOf(testCases[testCases.length - 1].value); >+ }; >+ } >+ >+ // Convert an automation method to a string for printing. >+ function eventToString(method, value, time, extras) { >+ let string = method + '('; >+ string += (value instanceof Array) ? `[${value}]` : value; >+ string += ', ' + time; >+ if (extras) { >+ string += ', ' + extras; >+ } >+ string += ')'; >+ return string; >+ } >+ >+ // Map between the automation method name and a function that computes the >+ // output value of the automation method. >+ const methodMap = { >+ linearRampToValueAtTime: audioParamLinearRamp, >+ exponentialRampToValueAtTime: audioParamExponentialRamp, >+ setValueAtTime: (t, v) => v >+ }; >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..02c641ef2d90ff9aa00f489d1f09363e8df8587b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 30: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Create Test Worklet] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e891da6da2b02924aac74b9e850677dc080b57b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html >@@ -0,0 +1,79 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParam of AudioWorkletNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ const audit = Audit.createTaskRunner(); >+ >+ // Use the worklet gain node to test k-rate parameters. >+ const filePath = >+ '../the-audioworklet-interface/processors/gain-processor.js'; >+ >+ // Context for testing >+ let context; >+ >+ audit.define('Create Test Worklet', (task, should) => { >+ >+ // Arbitrary sample rate and duration. >+ const sampleRate = 8000; >+ >+ // Only new a few render quanta to verify things are working. >+ const testDuration = 4 * 128 / sampleRate; >+ >+ context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ should( >+ context.audioWorklet.addModule(filePath), >+ 'Construction of AudioWorklet') >+ .beResolved() >+ .then(() => task.done()); >+ }); >+ >+ audit.define('AudioWorklet k-rate AudioParam', (task, should) => { >+ let src = new ConstantSourceNode(context); >+ >+ let kRateNode = new AudioWorkletNode(context, 'gain'); >+ >+ src.connect(kRateNode).connect(context.destination); >+ >+ let kRateParam = kRateNode.parameters.get('gain'); >+ kRateParam.automationRate = 'k-rate'; >+ >+ // Automate the gain >+ kRateParam.setValueAtTime(0, 0); >+ kRateParam.linearRampToValueAtTime( >+ 10, context.length / context.sampleRate); >+ >+ src.start(); >+ >+ context.startRendering() >+ .then(audioBuffer => { >+ let output = audioBuffer.getChannelData(0); >+ >+ // Verify that the output from the worklet is step-wise >+ // constant. >+ for (let k = 0; k < output.length; k += 128) { >+ should( >+ output.slice(k, k + 128), >+ ` k-rate output [${k}: ${k + 127}]`) >+ .beConstantValueOf(output[k]); >+ } >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b73074698614568b5d65a9909a2e85aa939e3d70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 22: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Biquad k-rate AudioParams (all)] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad.html >new file mode 100644 >index 0000000000000000000000000000000000000000..85ae4f175fe182a4bf993443163dea14f00fa203 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad.html >@@ -0,0 +1,111 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParams of BiquadFilterNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="automation-rate-testing.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {task: 'BiquadFilter-0', label: 'Biquad k-rate AudioParams (all)'}, >+ (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ doTest(context, should, { >+ nodeName: 'BiquadFilterNode', >+ nodeOptions: {type: 'lowpass'}, >+ prefix: 'All k-rate params', >+ // Set all AudioParams to k-rate >+ rateSettings: [ >+ {name: 'Q', value: 'k-rate'}, >+ {name: 'detune', value: 'k-rate'}, >+ {name: 'frequency', value: 'k-rate'}, >+ {name: 'gain', value: 'k-rate'}, >+ ], >+ // Automate just the frequency >+ automations: [{ >+ name: 'frequency', >+ methods: [ >+ {name: 'setValueAtTime', options: [350, 0]}, { >+ name: 'linearRampToValueAtTime', >+ options: [0, testDuration] >+ } >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ >+ // Define a test where we verify that a k-rate audio param produces >+ // different results from an a-rate audio param for each of the audio >+ // params of a biquad. >+ // >+ // Each entry gives the name of the AudioParam, an initial value to be >+ // used with setValueAtTime, and a final value to be used with >+ // linearRampToValueAtTime. (See |doTest| for details as well.) >+ >+ [{name: 'Q', >+ initial: 1, >+ final: 10 >+ }, >+ {name: 'detune', >+ initial: 0, >+ final: 1200 >+ }, >+ {name: 'frequency', >+ initial: 350, >+ final: 0 >+ }, >+ {name: 'gain', >+ initial: 10, >+ final: 0 >+ }].forEach(paramProperty => { >+ audit.define('Biquad k-rate ' + paramProperty.name, (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ doTest(context, should, { >+ nodeName: 'BiquadFilterNode', >+ nodeOptions: {type: 'peaking', Q: 1, gain: 10}, >+ prefix: `k-rate ${paramProperty.name}`, >+ // Just set the frequency to k-rate >+ rateSettings: [ >+ {name: paramProperty.name, value: 'k-rate'}, >+ ], >+ // Automate just the given AudioParam >+ automations: [{ >+ name: paramProperty.name, >+ methods: [ >+ {name: 'setValueAtTime', options: [paramProperty.initial, 0]}, { >+ name: 'linearRampToValueAtTime', >+ options: [paramProperty.final, testDuration] >+ } >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..88174b07155cd4574829917098c3d000a3441f91 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 22: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [ConstantSource k-rate offset] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5c421d0bc42f8981446f82ad606e49baa93f65a5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source.html >@@ -0,0 +1,81 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParam of ConstantSourceNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('ConstantSource k-rate offset', (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ >+ // Only new a few render quanta to verify things are working. >+ let testDuration = 4 * 128 / sampleRate; >+ >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ let merger = new ChannelMergerNode( >+ context, {numberOfInputs: context.numberOfChannels}); >+ merger.connect(context.destination); >+ let inverter = new GainNode(context, {gain: -1}); >+ inverter.connect(merger, 0, 2); >+ >+ let kRateNode = new ConstantSourceNode(context); >+ let aRateNode = new ConstantSourceNode(context); >+ >+ kRateNode.connect(merger, 0, 0); >+ aRateNode.connect(merger, 0, 1); >+ >+ kRateNode.connect(merger, 0, 2); >+ aRateNode.connect(inverter); >+ >+ // Set the rate >+ kRateNode.offset.automationRate = 'k-rate'; >+ >+ // Automate the offset >+ kRateNode.offset.setValueAtTime(0, 0); >+ kRateNode.offset.linearRampToValueAtTime(10, testDuration); >+ >+ aRateNode.offset.setValueAtTime(0, 0); >+ aRateNode.offset.linearRampToValueAtTime(10, testDuration); >+ >+ kRateNode.start(); >+ aRateNode.start(); >+ >+ context.startRendering() >+ .then(audioBuffer => { >+ let kRateOut = audioBuffer.getChannelData(0); >+ let aRateOut = audioBuffer.getChannelData(1); >+ let diff = audioBuffer.getChannelData(2); >+ >+ // Verify that the outputs are different. >+ should(diff, 'Difference between a-rate and k-rate outputs') >+ .notBeConstantValueOf(0); >+ >+ // Verify that the constant source node output is step-wise >+ // constant. >+ for (let k = 0; k < kRateOut.length; k += 128) { >+ should( >+ kRateOut.slice(k, k + 128), >+ `k-rate output [${k}: ${k + 127}]`) >+ .beConstantValueOf(kRateOut[k]); >+ } >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..e0f7370d5ec82357507821c97a24b9e705b03e92 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 20: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Test k-rate DelayNode] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5465c3943089e36b7dc95f65454904115beda55f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html >@@ -0,0 +1,49 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParam of DelayNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="automation-rate-testing.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('Test k-rate DelayNode', (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ >+ doTest(context, should, { >+ nodeName: 'DelayNode', >+ nodeOptions: null, >+ prefix: 'DelayNode', >+ // Set all AudioParams to k-rate >+ rateSettings: [{name: 'delayTime', value: 'k-rate'}], >+ // Automate just the frequency >+ automations: [{ >+ name: 'delayTime', >+ methods: [ >+ {name: 'setValueAtTime', options: [0, 0]}, { >+ name: 'linearRampToValueAtTime', >+ options: [.5, testDuration] >+ } >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a9bcba9c329d03c54c278bf23d266c1c6e380c6f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 20: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Test k-rate GainNode] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain.html >new file mode 100644 >index 0000000000000000000000000000000000000000..887d9f78db8a79b0aae96b9cdf818cde7b33aa6c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain.html >@@ -0,0 +1,47 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParam of GainNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="automation-rate-testing.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('Test k-rate GainNode', (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ >+ doTest(context, should, { >+ nodeName: 'GainNode', >+ nodeOptions: null, >+ prefix: 'GainNode', >+ // Set AudioParam to k-rate >+ rateSettings: [{name: 'gain', value: 'k-rate'}], >+ // Automate >+ automations: [{ >+ name: 'gain', >+ methods: [ >+ {name: 'setValueAtTime', options: [1, 0]}, >+ {name: 'linearRampToValueAtTime', options: [0, testDuration]} >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9bfc0b371244922b2e1493be6017cf452372f7a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 28: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Oscillator k-rate detune] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1672f0d975f2b2e2fd0c127663b403745b669265 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator.html >@@ -0,0 +1,88 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParams of OscillatorNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ >+ // Only new a few render quanta to verify things are working. >+ let testDuration = 4 * 128 / sampleRate; >+ >+ [{name: 'detune', initial: 0, final: 1200}, { >+ name: 'frequency', >+ initial: 440, >+ final: sampleRate / 2 >+ }].forEach(paramProperty => { >+ audit.define( >+ 'Oscillator k-rate ' + paramProperty.name, (task, should) => { >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ let merger = new ChannelMergerNode( >+ context, {numberOfInputs: context.numberOfChannels}); >+ merger.connect(context.destination); >+ let inverter = new GainNode(context, {gain: -1}); >+ inverter.connect(merger, 0, 2); >+ >+ let kRateNode = new OscillatorNode(context); >+ let aRateNode = new OscillatorNode(context); >+ >+ kRateNode.connect(merger, 0, 0); >+ aRateNode.connect(merger, 0, 1); >+ >+ kRateNode.connect(merger, 0, 2); >+ aRateNode.connect(inverter); >+ >+ // Set the rate >+ kRateNode[paramProperty.name].automationRate = 'k-rate'; >+ >+ // Automate the offset >+ kRateNode[paramProperty.name].setValueAtTime( >+ paramProperty.initial, 0); >+ kRateNode[paramProperty.name].linearRampToValueAtTime( >+ paramProperty.final, testDuration); >+ >+ aRateNode[paramProperty.name].setValueAtTime( >+ paramProperty.initial, 0); >+ aRateNode[paramProperty.name].linearRampToValueAtTime( >+ paramProperty.final, testDuration); >+ >+ kRateNode.start(); >+ aRateNode.start(); >+ >+ context.startRendering() >+ .then(audioBuffer => { >+ let kRateOut = audioBuffer.getChannelData(0); >+ let aRateOut = audioBuffer.getChannelData(1); >+ let diff = audioBuffer.getChannelData(2); >+ >+ // Verify that the outputs are different. >+ should( >+ diff, >+ 'k-rate ' + paramProperty.name + >+ ': Difference between a-rate and k-rate outputs') >+ .notBeConstantValueOf(0); >+ >+ }) >+ .then(() => task.done()); >+ }); >+ }); >+ >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a300317fb1a0d3b9e4d073359f20311f5507c945 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 34: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Panner k-rate positionX] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1e9e900adb1151453f1c9dc3e3c5326aef9eb211 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner.html >@@ -0,0 +1,172 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParams of PannerNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="automation-rate-testing.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ // Define a test where we verify that a k-rate audio param produces >+ // different results from an a-rate audio param for each of the audio >+ // params of a biquad. >+ // >+ // Each entry gives the name of the AudioParam, an initial value to be >+ // used with setValueAtTime, and a final value to be used with >+ // linearRampToValueAtTime. (See |doTest| for details as well.) >+ >+ [{name: 'positionX', initial: 0, final: 1000}, >+ {name: 'positionY', initial: 0, final: 1000}, >+ {name: 'orientationX', initial: .1, final: 1000}, >+ {name: 'orientationY', initial: .1, final: 1000}, >+ {name: 'orientationZ', initial: .1, final: 1000}, >+ ].forEach(paramProperty => { >+ audit.define('Panner k-rate ' + paramProperty.name, (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ doTest(context, should, { >+ nodeName: 'PannerNode', >+ // Make the source directional so orientation matters, and set some >+ // defaults for the position and orientation so that we're not on an >+ // axis where the azimuth and elevation might be constant when >+ // moving one of the AudioParams. >+ nodeOptions: { >+ distanceModel: 'inverse', >+ coneOuterAngle: 360, >+ coneInnerAngle: 10, >+ positionX: 10, >+ positionY: 10, >+ positionZ: 10, >+ orientationX: 1, >+ orientationY: 1, >+ orientationZ: 1 >+ }, >+ prefix: `k-rate ${paramProperty.name}`, >+ // Just set the frequency to k-rate >+ rateSettings: [ >+ {name: paramProperty.name, value: 'k-rate'}, >+ ], >+ // Automate just the given AudioParam >+ automations: [{ >+ name: paramProperty.name, >+ methods: [ >+ {name: 'setValueAtTime', options: [paramProperty.initial, 0]}, { >+ name: 'linearRampToValueAtTime', >+ options: [paramProperty.final, testDuration] >+ } >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ }); >+ >+ // Test k-rate automation of the listener. The intial and final >+ // automation values are pretty arbitrary, except that they should be such >+ // that the panner and listener produces non-constant output. >+ [{name: 'positionX', initial: [1, 0], final: [1000, 1]}, >+ {name: 'positionY', initial: [1, 0], final: [1000, 1]}, >+ {name: 'positionZ', initial: [1, 0], final: [1000, 1]}, >+ {name: 'forwardX', initial: [-1, 0], final: [1, 1]}, >+ {name: 'forwardY', initial: [-1, 0], final: [1, 1]}, >+ {name: 'forwardZ', initial: [-1, 0], final: [1, 1]}, >+ {name: 'upX', initial: [-1, 0], final: [1000, 1]}, >+ {name: 'upY', initial: [-1, 0], final: [1000, 1]}, >+ {name: 'upZ', initial: [-1, 0], final: [1000, 1]}, >+ ].forEach(paramProperty => { >+ audit.define( >+ 'Listener k-rate ' + paramProperty.name, (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 5 * 128 / sampleRate; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 1, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ doListenerTest(context, should, { >+ param: paramProperty.name, >+ initial: paramProperty.initial, >+ final: paramProperty.final >+ }).then(() => task.done()); >+ }); >+ }); >+ >+ audit.run(); >+ >+ function doListenerTest(context, should, options) { >+ let src = new ConstantSourceNode(context); >+ let panner = new PannerNode(context, { >+ distanceModel: 'inverse', >+ coneOuterAngle: 360, >+ coneInnerAngle: 10, >+ positionX: 10, >+ positionY: 10, >+ positionZ: 10, >+ orientationX: 1, >+ orientationY: 1, >+ orientationZ: 1 >+ }); >+ >+ src.connect(panner).connect(context.destination); >+ >+ src.start(); >+ >+ let listener = context.listener; >+ >+ // Set listener properties to "random" values so that motion on one of >+ // the attributes actually changes things relative to the panner >+ // location. >+ listener.positionX.value = -1; >+ listener.positionY.value = 1; >+ listener.positionZ.value = -1; >+ listener.forwardX.value = -1; >+ listener.forwardY.value = 1; >+ listener.forwardZ.value = -1; >+ listener.upX.value = 1; >+ listener.upY.value = 1; >+ listener.upZ.value = 1; >+ >+ let audioParam = listener[options.param]; >+ audioParam.automationRate = 'k-rate'; >+ >+ let prefix = `Listener ${options.param}`; >+ should(audioParam.automationRate, prefix + '.automationRate') >+ .beEqualTo('k-rate'); >+ should(() => { >+ audioParam.setValueAtTime(...options.initial); >+ }, prefix + `.setValueAtTime(${options.initial})`).notThrow(); >+ should(() => { >+ audioParam.linearRampToValueAtTime(...options.final); >+ }, prefix + `.linearRampToValueAtTime(${options.final})`).notThrow(); >+ >+ return context.startRendering().then(renderedBuffer => { >+ let prefix = `Listener k-rate ${options.param}: `; >+ let output = renderedBuffer.getChannelData(0); >+ // Sanity check that the output isn't constant. >+ should(output, prefix + `Output`).notBeConstantValueOf(output[0]); >+ >+ // Verify that the output is constant over each render quantum >+ for (let k = 0; k < output.length; k += 128) { >+ should( >+ output.slice(k, k + 128), prefix + `Output [${k}, ${k + 127}]`) >+ .beConstantValueOf(output[k]); >+ } >+ }); >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..878703e976153d4f9bf296e916a0bcde18a8d07e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 20: TypeError: Not enough arguments >+ >+Harness Error (FAIL), message = TypeError: Not enough arguments >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Test k-rate StereoPannerNode] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html >new file mode 100644 >index 0000000000000000000000000000000000000000..06905b89c31884ca9f5ec012a2263d68840d043f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html >@@ -0,0 +1,48 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test k-rate AudioParam of StereoPannerNode</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="automation-rate-testing.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('Test k-rate StereoPannerNode', (task, should) => { >+ // Arbitrary sample rate and duration. >+ let sampleRate = 8000; >+ let testDuration = 1; >+ let context = new OfflineAudioContext({ >+ numberOfChannels: 3, >+ sampleRate: sampleRate, >+ length: testDuration * sampleRate >+ }); >+ >+ doTest(context, should, { >+ nodeName: 'StereoPannerNode', >+ nodeOptions: null, >+ prefix: 'StereoPannerNode', >+ // Set all AudioParams to k-rate. >+ rateSettings: [{name: 'pan', value: 'k-rate'}], >+ // Automate just the frequency. >+ automations: [{ >+ name: 'pan', >+ methods: [ >+ {name: 'setValueAtTime', options: [0, 0]}, { >+ name: 'linearRampToValueAtTime', >+ options: [.5, testDuration] >+ } >+ ] >+ }] >+ }).then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/w3c-import.log >index a45e33457fd6725863ce235c036a01032b1733be..472b239f4e98c87cfadb5d2deda20ca568cdfbd2 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/w3c-import.log >@@ -14,7 +14,29 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-large-endtime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-linearRampToValueAtTime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-method-chaining.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setTargetAtTime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueAtTime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-summingjunction.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-testing.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/idl-test.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-panner.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/retrospective-exponentialRampToValueAtTime.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/retrospective-linearRampToValueAtTime.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/retrospective-setTargetAtTime.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..49369b38932a5ef98221a08167374e6db0fefffd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 30: TypeError: undefined is not an object (evaluating 'context.audioWorklet.addModule') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.audioWorklet.addModule') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [setup-worklet] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..330b359f7d9c4dbe24056a763ef3473389839192 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html >@@ -0,0 +1,73 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test AudioWorkletNode's automatic pull feature >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ const audit = Audit.createTaskRunner(); >+ >+ // Arbitrary sample rate. Anything should work. >+ const sampleRate = 48000; >+ const renderLength = RENDER_QUANTUM_FRAMES * 2; >+ const channelCount = 1; >+ const filePath = 'processors/zero-output-processor.js'; >+ >+ const sourceOffset = 0.5; >+ >+ // Connect a constant source node to the zero-output AudioWorkletNode. >+ // Then verify if it captures the data correctly. >+ audit.define('setup-worklet', (task, should) => { >+ const context = >+ new OfflineAudioContext(channelCount, renderLength, sampleRate); >+ >+ context.audioWorklet.addModule(filePath).then(() => { >+ let testSource = >+ new ConstantSourceNode(context, { offset: sourceOffset }); >+ let zeroOutputWorkletNode = >+ new AudioWorkletNode(context, 'zero-output-processor', { >+ numberOfInputs: 1, >+ numberOfOutputs: 0, >+ processorOptions: { >+ bufferLength: renderLength, >+ channeCount: channelCount >+ } >+ }); >+ >+ // Start the source and stop at the first render quantum. >+ testSource.connect(zeroOutputWorkletNode); >+ testSource.start(); >+ testSource.stop(RENDER_QUANTUM_FRAMES/sampleRate); >+ >+ zeroOutputWorkletNode.port.onmessage = (event) => { >+ // The |capturedBuffer| can be multichannel. Iterate through it. >+ for (let i = 0; i < event.data.capturedBuffer.length; ++i) { >+ let buffer = event.data.capturedBuffer[i]; >+ // Split the captured buffer in half for the easier test. >+ should(buffer.subarray(0, RENDER_QUANTUM_FRAMES), >+ 'The first half of the captured buffer') >+ .beConstantValueOf(sourceOffset); >+ should(buffer.subarray(RENDER_QUANTUM_FRAMES, renderLength), >+ 'The second half of the captured buffer') >+ .beConstantValueOf(0); >+ } >+ task.done(); >+ }; >+ >+ // Starts the rendering, but we don't need the rendered buffer from >+ // the context. >+ context.startRendering(); >+ }); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/w3c-import.log >index 04051112ec0dbd423f3b26e71629fea69b37ae5f..d47b6ae26d701cb897ea7017eae685baa54dec1a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/w3c-import.log >@@ -22,3 +22,4 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/option-test-processor.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/port-processor.js > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/timing-info-processor.js >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/zero-output-processor.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/zero-output-processor.js b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/zero-output-processor.js >new file mode 100644 >index 0000000000000000000000000000000000000000..b97ed6e115132e7fe9679812788d252b01090c4c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/processors/zero-output-processor.js >@@ -0,0 +1,42 @@ >+/** >+ * @class ZeroOutputProcessor >+ * @extends AudioWorkletProcessor >+ * >+ * This processor accumulates the incoming buffer and send the buffered data >+ * to the main thread when it reaches the specified frame length. The processor >+ * only supports the single input. >+ */ >+ >+const kRenderQuantumFrames = 128; >+ >+class ZeroOuttputProcessor extends AudioWorkletProcessor { >+ constructor(options) { >+ super(); >+ >+ this._framesRequested = options.processorOptions.bufferLength; >+ this._framesCaptured = 0; >+ this._buffer = []; >+ for (let i = 0; i < options.processorOptions.channeCount; ++i) { >+ this._buffer[i] = new Float32Array(this._framesRequested); >+ } >+ } >+ >+ process(inputs) { >+ let input = inputs[0]; >+ let startIndex = this._framesCaptured; >+ let endIndex = startIndex + kRenderQuantumFrames; >+ for (let i = 0; i < this._buffer.length; ++i) { >+ this._buffer[i].subarray(startIndex, endIndex).set(input[i]); >+ } >+ this._framesCaptured = endIndex; >+ >+ if (this._framesCaptured >= this._framesRequested) { >+ this.port.postMessage({ capturedBuffer: this._buffer }); >+ return false; >+ } else { >+ return true; >+ } >+ } >+} >+ >+registerProcessor('zero-output-processor', ZeroOuttputProcessor); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/w3c-import.log >index 84e67027c23e4703c9c3bd09887fcc4648349195..1d93c5d7ebc1deea9fd450b28c57e5cfa99085f7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/w3c-import.log >@@ -19,6 +19,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-messageport.https.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-timing-info.https.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-automatic-pull.https.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-channel-count.https.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..be3335e35857ee76c651162be87d426ab2c5845f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad allpass filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass.html >new file mode 100644 >index 0000000000000000000000000000000000000000..86618f9e46dbc1b5462f949cadf703ac59993577 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass.html >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-allpass.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad allpass filter'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ let filterParameters = [ >+ {cutoff: 0, q: 10, gain: 1}, >+ {cutoff: 1, q: 10, gain: 1}, >+ {cutoff: .5, q: 0, gain: 1}, >+ {cutoff: 0.25, q: 10, gain: 1}, >+ ]; >+ createTestAndRun(context, 'allpass', { >+ should: should, >+ threshold: 3.9337e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a92d815aa33251acf8ca3266c356590c1a510b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 161: SyntaxError: The string did not match the expected pattern. >+ >+Harness Error (FAIL), message = SyntaxError: The string did not match the expected pattern. >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [automate-freq] >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html >new file mode 100644 >index 0000000000000000000000000000000000000000..54b2142cea250cdbfe084df6fb9e1d42eac96cd2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html >@@ -0,0 +1,406 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Biquad Automation Test >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/audioparam-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ // Don't need to run these tests at high sampling rate, so just use a low >+ // one to reduce memory usage and complexity. >+ let sampleRate = 16000; >+ >+ // How long to render for each test. >+ let renderDuration = 0.25; >+ // Where to end the automations. Fairly arbitrary, but must end before >+ // the renderDuration. >+ let automationEndTime = renderDuration / 2; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ // The definition of the linear ramp automation function. >+ function linearRamp(t, v0, v1, t0, t1) { >+ return v0 + (v1 - v0) * (t - t0) / (t1 - t0); >+ } >+ >+ // Generate the filter coefficients for the specified filter using the >+ // given parameters for the given duration. |filterTypeFunction| is a >+ // function that returns the filter coefficients for one set of >+ // parameters. |parameters| is a property bag that contains the start and >+ // end values (as an array) for each of the biquad attributes. The >+ // properties are |freq|, |Q|, |gain|, and |detune|. |duration| is the >+ // number of seconds for which the coefficients are generated. >+ // >+ // A property bag with properties |b0|, |b1|, |b2|, |a1|, |a2|. Each >+ // propery is an array consisting of the coefficients for the time-varying >+ // biquad filter. >+ function generateFilterCoefficients( >+ filterTypeFunction, parameters, duration) { >+ let renderEndFrame = Math.ceil(renderDuration * sampleRate); >+ let endFrame = Math.ceil(duration * sampleRate); >+ let nCoef = renderEndFrame; >+ let b0 = new Float64Array(nCoef); >+ let b1 = new Float64Array(nCoef); >+ let b2 = new Float64Array(nCoef); >+ let a1 = new Float64Array(nCoef); >+ let a2 = new Float64Array(nCoef); >+ >+ let k = 0; >+ // If the property is not given, use the defaults. >+ let freqs = parameters.freq || [350, 350]; >+ let qs = parameters.Q || [1, 1]; >+ let gains = parameters.gain || [0, 0]; >+ let detunes = parameters.detune || [0, 0]; >+ >+ for (let frame = 0; frame <= endFrame; ++frame) { >+ // Apply linear ramp at frame |frame|. >+ let f = >+ linearRamp(frame / sampleRate, freqs[0], freqs[1], 0, duration); >+ let q = linearRamp(frame / sampleRate, qs[0], qs[1], 0, duration); >+ let g = >+ linearRamp(frame / sampleRate, gains[0], gains[1], 0, duration); >+ let d = linearRamp( >+ frame / sampleRate, detunes[0], detunes[1], 0, duration); >+ >+ // Compute actual frequency parameter >+ f = f * Math.pow(2, d / 1200); >+ >+ // Compute filter coefficients >+ let coef = filterTypeFunction(f / (sampleRate / 2), q, g); >+ b0[k] = coef.b0; >+ b1[k] = coef.b1; >+ b2[k] = coef.b2; >+ a1[k] = coef.a1; >+ a2[k] = coef.a2; >+ ++k; >+ } >+ >+ // Fill the rest of the arrays with the constant value to the end of >+ // the rendering duration. >+ b0.fill(b0[endFrame], endFrame + 1); >+ b1.fill(b1[endFrame], endFrame + 1); >+ b2.fill(b2[endFrame], endFrame + 1); >+ a1.fill(a1[endFrame], endFrame + 1); >+ a2.fill(a2[endFrame], endFrame + 1); >+ >+ return {b0: b0, b1: b1, b2: b2, a1: a1, a2: a2}; >+ } >+ >+ // Apply the given time-varying biquad filter to the given signal, >+ // |signal|. |coef| should be the time-varying coefficients of the >+ // filter, as returned by |generateFilterCoefficients|. >+ function timeVaryingFilter(signal, coef) { >+ let length = signal.length; >+ // Use double precision for the internal computations. >+ let y = new Float64Array(length); >+ >+ // Prime the pump. (Assumes the signal has length >= 2!) >+ y[0] = coef.b0[0] * signal[0]; >+ y[1] = >+ coef.b0[1] * signal[1] + coef.b1[1] * signal[0] - coef.a1[1] * y[0]; >+ >+ for (let n = 2; n < length; ++n) { >+ y[n] = coef.b0[n] * signal[n] + coef.b1[n] * signal[n - 1] + >+ coef.b2[n] * signal[n - 2]; >+ y[n] -= coef.a1[n] * y[n - 1] + coef.a2[n] * y[n - 2]; >+ } >+ >+ // But convert the result to single precision for comparison. >+ return y.map(Math.fround); >+ } >+ >+ // Configure the audio graph using |context|. Returns the biquad filter >+ // node and the AudioBuffer used for the source. >+ function configureGraph(context, toneFrequency) { >+ // The source is just a simple sine wave. >+ let src = context.createBufferSource(); >+ let b = >+ context.createBuffer(1, renderDuration * sampleRate, sampleRate); >+ let data = b.getChannelData(0); >+ let omega = 2 * Math.PI * toneFrequency / sampleRate; >+ for (let k = 0; k < data.length; ++k) { >+ data[k] = Math.sin(omega * k); >+ } >+ src.buffer = b; >+ let f = context.createBiquadFilter(); >+ src.connect(f); >+ f.connect(context.destination); >+ >+ src.start(); >+ >+ return {filter: f, source: b}; >+ } >+ >+ function createFilterVerifier( >+ should, filterCreator, threshold, parameters, input, message) { >+ return function(resultBuffer) { >+ let actual = resultBuffer.getChannelData(0); >+ let coefs = generateFilterCoefficients( >+ filterCreator, parameters, automationEndTime); >+ >+ reference = timeVaryingFilter(input, coefs); >+ >+ should(actual, message).beCloseToArray(reference, { >+ absoluteThreshold: threshold >+ }); >+ }; >+ } >+ >+ // Automate just the frequency parameter. A bandpass filter is used where >+ // the center frequency is swept across the source (which is a simple >+ // tone). >+ audit.define('automate-freq', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ >+ // Center frequency of bandpass filter and also the frequency of the >+ // test tone. >+ let centerFreq = 10 * 440; >+ >+ // Sweep the frequency +/- 5*440 Hz from the center. This should cause >+ // the output to be low at the beginning and end of the test where the >+ // tone is outside the pass band of the filter, but high in the middle >+ // of the automation time where the tone is near the center of the pass >+ // band. Make sure the frequency sweep stays inside the Nyquist >+ // frequency. >+ let parameters = {freq: [centerFreq - 5 * 440, centerFreq + 5 * 440]}; >+ let graph = configureGraph(context, centerFreq); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ f.type = 'bandpass'; >+ f.frequency.setValueAtTime(parameters.freq[0], 0); >+ f.frequency.linearRampToValueAtTime( >+ parameters.freq[1], automationEndTime); >+ >+ context.startRendering() >+ .then(createFilterVerifier( >+ should, createBandpassFilter, 4.6455e-6, parameters, >+ b.getChannelData(0), >+ 'Output of bandpass filter with frequency automation')) >+ .then(() => task.done()); >+ }); >+ >+ // Automate just the Q parameter. A bandpass filter is used where the Q >+ // of the filter is swept. >+ audit.define('automate-q', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ >+ // The frequency of the test tone. >+ let centerFreq = 440; >+ >+ // Sweep the Q paramter between 1 and 200. This will cause the output >+ // of the filter to pass most of the tone at the beginning to passing >+ // less of the tone at the end. This is because we set center frequency >+ // of the bandpass filter to be slightly off from the actual tone. >+ let parameters = { >+ Q: [1, 200], >+ // Center frequency of the bandpass filter is just 25 Hz above the >+ // tone frequency. >+ freq: [centerFreq + 25, centerFreq + 25] >+ }; >+ let graph = configureGraph(context, centerFreq); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ f.type = 'bandpass'; >+ f.frequency.value = parameters.freq[0]; >+ f.Q.setValueAtTime(parameters.Q[0], 0); >+ f.Q.linearRampToValueAtTime(parameters.Q[1], automationEndTime); >+ >+ context.startRendering() >+ .then(createFilterVerifier( >+ should, createBandpassFilter, 9.8348e-7, parameters, >+ b.getChannelData(0), >+ 'Output of bandpass filter with Q automation')) >+ .then(() => task.done()); >+ }); >+ >+ // Automate just the gain of the lowshelf filter. A test tone will be in >+ // the lowshelf part of the filter. The output will vary as the gain of >+ // the lowshelf is changed. >+ audit.define('automate-gain', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ >+ // Frequency of the test tone. >+ let centerFreq = 440; >+ >+ // Set the cutoff frequency of the lowshelf to be significantly higher >+ // than the test tone. Sweep the gain from 20 dB to -20 dB. (We go from >+ // 20 to -20 to easily verify that the filter didn't go unstable.) >+ let parameters = {freq: [3500, 3500], gain: [20, -20]}; >+ let graph = configureGraph(context, centerFreq); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ f.type = 'lowshelf'; >+ f.frequency.value = parameters.freq[0]; >+ f.gain.setValueAtTime(parameters.gain[0], 0); >+ f.gain.linearRampToValueAtTime(parameters.gain[1], automationEndTime); >+ >+ context.startRendering() >+ .then(createFilterVerifier( >+ should, createLowShelfFilter, 2.7657e-5, parameters, >+ b.getChannelData(0), >+ 'Output of lowshelf filter with gain automation')) >+ .then(() => task.done()); >+ }); >+ >+ // Automate just the detune parameter. Basically the same test as for the >+ // frequncy parameter but we just use the detune parameter to modulate the >+ // frequency parameter. >+ audit.define('automate-detune', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ let centerFreq = 10 * 440; >+ let parameters = { >+ freq: [centerFreq, centerFreq], >+ detune: [-10 * 1200, 10 * 1200] >+ }; >+ let graph = configureGraph(context, centerFreq); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ f.type = 'bandpass'; >+ f.frequency.value = parameters.freq[0]; >+ f.detune.setValueAtTime(parameters.detune[0], 0); >+ f.detune.linearRampToValueAtTime( >+ parameters.detune[1], automationEndTime); >+ >+ context.startRendering() >+ .then(createFilterVerifier( >+ should, createBandpassFilter, 3.1471e-5, parameters, >+ b.getChannelData(0), >+ 'Output of bandpass filter with detune automation')) >+ .then(() => task.done()); >+ }); >+ >+ // Automate all of the filter parameters at once. This is a basic check >+ // that everything is working. A peaking filter is used because it uses >+ // all of the parameters. >+ audit.define('automate-all', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ let graph = configureGraph(context, 10 * 440); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ // Sweep all of the filter parameters. These are pretty much arbitrary. >+ let parameters = { >+ freq: [8000, 100], >+ Q: [f.Q.value, .0001], >+ gain: [f.gain.value, 20], >+ detune: [2400, -2400] >+ }; >+ >+ f.type = 'peaking'; >+ // Set starting points for all parameters of the filter. Start at 10 >+ // kHz for the center frequency, and the defaults for Q and gain. >+ f.frequency.setValueAtTime(parameters.freq[0], 0); >+ f.Q.setValueAtTime(parameters.Q[0], 0); >+ f.gain.setValueAtTime(parameters.gain[0], 0); >+ f.detune.setValueAtTime(parameters.detune[0], 0); >+ >+ // Linear ramp each parameter >+ f.frequency.linearRampToValueAtTime( >+ parameters.freq[1], automationEndTime); >+ f.Q.linearRampToValueAtTime(parameters.Q[1], automationEndTime); >+ f.gain.linearRampToValueAtTime(parameters.gain[1], automationEndTime); >+ f.detune.linearRampToValueAtTime( >+ parameters.detune[1], automationEndTime); >+ >+ context.startRendering() >+ .then(createFilterVerifier( >+ should, createPeakingFilter, 6.2907e-4, parameters, >+ b.getChannelData(0), >+ 'Output of peaking filter with automation of all parameters')) >+ .then(() => task.done()); >+ }); >+ >+ // Test that modulation of the frequency parameter of the filter works. A >+ // sinusoid of 440 Hz is the test signal that is applied to a bandpass >+ // biquad filter. The frequency parameter of the filter is modulated by a >+ // sinusoid at 103 Hz, and the frequency modulation varies from 116 to 412 >+ // Hz. (This test was taken from the description in >+ // https://github.com/WebAudio/web-audio-api/issues/509#issuecomment-94731355) >+ audit.define('modulation', (task, should) => { >+ let context = >+ new OfflineAudioContext(1, renderDuration * sampleRate, sampleRate); >+ >+ // Create a graph with the sinusoidal source at 440 Hz as the input to a >+ // biquad filter. >+ let graph = configureGraph(context, 440); >+ let f = graph.filter; >+ let b = graph.source; >+ >+ f.type = 'bandpass'; >+ f.Q.value = 5; >+ f.frequency.value = 264; >+ >+ // Create the modulation source, a sinusoid with frequency 103 Hz and >+ // amplitude 148. (The amplitude of 148 is added to the filter's >+ // frequency value of 264 to produce a sinusoidal modulation of the >+ // frequency parameter from 116 to 412 Hz.) >+ let mod = context.createBufferSource(); >+ let mbuffer = >+ context.createBuffer(1, renderDuration * sampleRate, sampleRate); >+ let d = mbuffer.getChannelData(0); >+ let omega = 2 * Math.PI * 103 / sampleRate; >+ for (let k = 0; k < d.length; ++k) { >+ d[k] = 148 * Math.sin(omega * k); >+ } >+ mod.buffer = mbuffer; >+ >+ mod.connect(f.frequency); >+ >+ mod.start(); >+ context.startRendering() >+ .then(function(resultBuffer) { >+ let actual = resultBuffer.getChannelData(0); >+ // Compute the filter coefficients using the mod sine wave >+ >+ let endFrame = Math.ceil(renderDuration * sampleRate); >+ let nCoef = endFrame; >+ let b0 = new Float64Array(nCoef); >+ let b1 = new Float64Array(nCoef); >+ let b2 = new Float64Array(nCoef); >+ let a1 = new Float64Array(nCoef); >+ let a2 = new Float64Array(nCoef); >+ >+ // Generate the filter coefficients when the frequency varies from >+ // 116 to 248 Hz using the 103 Hz sinusoid. >+ for (let k = 0; k < nCoef; ++k) { >+ let freq = f.frequency.value + d[k]; >+ let c = createBandpassFilter( >+ freq / (sampleRate / 2), f.Q.value, f.gain.value); >+ b0[k] = c.b0; >+ b1[k] = c.b1; >+ b2[k] = c.b2; >+ a1[k] = c.a1; >+ a2[k] = c.a2; >+ } >+ reference = timeVaryingFilter( >+ b.getChannelData(0), >+ {b0: b0, b1: b1, b2: b2, a1: a1, a2: a2}); >+ >+ should( >+ actual, >+ 'Output of bandpass filter with sinusoidal modulation of bandpass center frequency') >+ .beCloseToArray(reference, {absoluteThreshold: 3.9787e-5}); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..fd0dece8469fdcfe5d173a55e47dbad650529574 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad bandpass filter. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass.html >new file mode 100644 >index 0000000000000000000000000000000000000000..166aa9b3cb8813db11e245edbcea628bf87ef051 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass.html >@@ -0,0 +1,44 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-bandpass.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad bandpass filter.'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 0, gain: 1}, >+ {cutoff: 1, q: 0, gain: 1}, >+ {cutoff: 0.5, q: 0, gain: 1}, >+ {cutoff: 0.25, q: 1, gain: 1}, >+ ]; >+ >+ createTestAndRun(context, 'bandpass', { >+ should: should, >+ threshold: 2.2501e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..45b964d95b359b36872903401208cf65be3ee2b7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic-expected.txt >@@ -0,0 +1,26 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS Initialize context for testing did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [existence] >+PASS context.createBiquadFilter does exist. >+PASS < [existence] All assertions passed. (total 1 assertions) >+PASS > [parameters] >+PASS numberOfInputs is equal to 1. >+PASS numberOfOutputs is equal to 1. >+PASS channelCountMode is equal to max. >+PASS channelInterpretation is equal to speakers. >+PASS < [parameters] All assertions passed. (total 4 assertions) >+PASS > [exceptions-createBiquadFilter] >+PASS createBiquadFilter() did not throw an exception. >+PASS < [exceptions-createBiquadFilter] All assertions passed. (total 1 assertions) >+PASS > [exceptions-getFrequencyData] >+FAIL X getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) did not throw an exception. assert_true: expected true got false >+FAIL X getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) did not throw an exception. assert_true: expected true got false >+FAIL X getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) did not throw an exception. assert_true: expected true got false >+FAIL X getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) did not throw an exception. assert_true: expected true got false >+FAIL X getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) did not throw an exception. assert_true: expected true got false >+FAIL < [exceptions-getFrequencyData] 5 out of 5 assertions were failed. assert_true: expected true got false >+FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 5 tasks were failed. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c4f7c07965fa3edc0a4ddbabf5ed5dd8b192ef27 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html >@@ -0,0 +1,134 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Basic BiquadFilterNode Properties >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let sampleRate = 48000; >+ let testFrames = 100; >+ >+ // Global context that can be used by the individual tasks. It must be >+ // defined by the initialize task. >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ should(() => { >+ context = new OfflineAudioContext(1, testFrames, sampleRate); >+ }, 'Initialize context for testing').notThrow(); >+ task.done(); >+ }); >+ >+ audit.define('existence', (task, should) => { >+ should(context.createBiquadFilter, 'context.createBiquadFilter') >+ .exist(); >+ task.done(); >+ }); >+ >+ audit.define('parameters', (task, should) => { >+ // Create a really simple IIR filter. Doesn't much matter what. >+ let coef = Float32Array.from([1]); >+ >+ let f = context.createBiquadFilter(coef, coef); >+ >+ should(f.numberOfInputs, 'numberOfInputs').beEqualTo(1); >+ should(f.numberOfOutputs, 'numberOfOutputs').beEqualTo(1); >+ should(f.channelCountMode, 'channelCountMode').beEqualTo('max'); >+ should(f.channelInterpretation, 'channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ task.done(); >+ }); >+ >+ audit.define('exceptions-createBiquadFilter', (task, should) => { >+ should(function() { >+ // Two args are required. >+ context.createBiquadFilter(); >+ }, 'createBiquadFilter()').notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.define('exceptions-getFrequencyData', (task, should) => { >+ // Create a really simple IIR filter. Doesn't much matter what. >+ let coef = Float32Array.from([1]); >+ >+ let f = context.createBiquadFilter(coef, coef); >+ >+ should( >+ function() { >+ // frequencyHz can't be null. >+ f.getFrequencyResponse( >+ null, new Float32Array(1), new Float32Array(1)); >+ }, >+ 'getFrequencyResponse(' + >+ 'null, ' + >+ 'new Float32Array(1), ' + >+ 'new Float32Array(1))') >+ .throw('TypeError'); >+ >+ should( >+ function() { >+ // magResponse can't be null. >+ f.getFrequencyResponse( >+ new Float32Array(1), null, new Float32Array(1)); >+ }, >+ 'getFrequencyResponse(' + >+ 'new Float32Array(1), ' + >+ 'null, ' + >+ 'new Float32Array(1))') >+ .throw('TypeError'); >+ >+ should( >+ function() { >+ // phaseResponse can't be null. >+ f.getFrequencyResponse( >+ new Float32Array(1), new Float32Array(1), null); >+ }, >+ 'getFrequencyResponse(' + >+ 'new Float32Array(1), ' + >+ 'new Float32Array(1), ' + >+ 'null)') >+ .throw('TypeError'); >+ >+ should( >+ function() { >+ // magResponse array must the same length as frequencyHz >+ f.getFrequencyResponse( >+ new Float32Array(10), new Float32Array(1), >+ new Float32Array(20)); >+ }, >+ 'getFrequencyResponse(' + >+ 'new Float32Array(10), ' + >+ 'new Float32Array(1), ' + >+ 'new Float32Array(20))') >+ .throw('InvalidAccessError'); >+ >+ should( >+ function() { >+ // phaseResponse array must be the same length as frequencyHz >+ f.getFrequencyResponse( >+ new Float32Array(10), new Float32Array(20), >+ new Float32Array(1)); >+ }, >+ 'getFrequencyResponse(' + >+ 'new Float32Array(10), ' + >+ 'new Float32Array(20), ' + >+ 'new Float32Array(1))') >+ .throw('InvalidAccessError'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4f92778e763fbbdb52ead6ad7dc4b1ce3f97bb41 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse-expected.txt >@@ -0,0 +1,16 @@ >+CONSOLE MESSAGE: line 302: TypeError: function is not a constructor (evaluating 'new BiquadFilterNode(context)') >+ >+Harness Error (FAIL), message = TypeError: function is not a constructor (evaluating 'new BiquadFilterNode(context)') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad frequency response >+PASS Number of non-finite values in magnitude response is equal to 0. >+PASS Number of non-finte values in phase response is equal to 0. >+PASS Number of non-finite values in the expected magnitude response is equal to 0. >+PASS Number of non-finite values in expected phase response is equal to 0. >+PASS Actual and expected results contained only finite values is true. >+PASS Max error (-124.9664097542858 dB) of magnitude response at frequency 1992 Hz is less than or equal to -120.1976646786419. >+PASS Max error (0.0000022600132665057376 deg) in phase response at frequency 1080 Hz is less than or equal to 0.0000031046864044753917. >+PASS < [test] All assertions passed. (total 7 assertions) >+PASS > [getFrequencyResponse] Test out-of-bounds frequency values >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html >new file mode 100644 >index 0000000000000000000000000000000000000000..83f057fce7e708cccb43734856f7e3fce604836f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html >@@ -0,0 +1,335 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test BiquadFilter getFrequencyResponse() functionality >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // Test the frequency response of a biquad filter. We compute the >+ // frequency response for a simple peaking biquad filter and compare it >+ // with the expected frequency response. The actual filter used doesn't >+ // matter since we're testing getFrequencyResponse and not the actual >+ // filter output. The filters are extensively tested in other biquad >+ // tests. >+ >+ // The magnitude response of the biquad filter. >+ let magResponse; >+ >+ // The phase response of the biquad filter. >+ let phaseResponse; >+ >+ // Number of frequency samples to take. >+ let numberOfFrequencies = 1000; >+ >+ // The filter parameters. >+ let filterCutoff = 1000; // Hz. >+ let filterQ = 1; >+ let filterGain = 5; // Decibels. >+ >+ // The maximum allowed error in the magnitude response. >+ let maxAllowedMagError = 9.775e-7; >+ >+ // The maximum allowed error in the phase response. >+ let maxAllowedPhaseError = 5.4187e-8; >+ >+ // The magnitudes and phases of the reference frequency response. >+ let expectedMagnitudes; >+ let expectedPhases; >+ >+ // Convert frequency in Hz to a normalized frequency between 0 to 1 with 1 >+ // corresponding to the Nyquist frequency. >+ function normalizedFrequency(freqHz, sampleRate) { >+ let nyquist = sampleRate / 2; >+ return freqHz / nyquist; >+ } >+ >+ // Get the filter response at a (normalized) frequency |f| for the filter >+ // with coefficients |coef|. >+ function getResponseAt(coef, f) { >+ let b0 = coef.b0; >+ let b1 = coef.b1; >+ let b2 = coef.b2; >+ let a1 = coef.a1; >+ let a2 = coef.a2; >+ >+ // H(z) = (b0 + b1 / z + b2 / z^2) / (1 + a1 / z + a2 / z^2) >+ // >+ // Compute H(exp(i * pi * f)). No native complex numbers in javascript, >+ // so break H(exp(i * pi * // f)) in to the real and imaginary parts of >+ // the numerator and denominator. Let omega = pi * f. Then the >+ // numerator is >+ // >+ // b0 + b1 * cos(omega) + b2 * cos(2 * omega) - i * (b1 * sin(omega) + >+ // b2 * sin(2 * omega)) >+ // >+ // and the denominator is >+ // >+ // 1 + a1 * cos(omega) + a2 * cos(2 * omega) - i * (a1 * sin(omega) + a2 >+ // * sin(2 * omega)) >+ // >+ // Compute the magnitude and phase from the real and imaginary parts. >+ >+ let omega = Math.PI * f; >+ let numeratorReal = >+ b0 + b1 * Math.cos(omega) + b2 * Math.cos(2 * omega); >+ let numeratorImag = -(b1 * Math.sin(omega) + b2 * Math.sin(2 * omega)); >+ let denominatorReal = >+ 1 + a1 * Math.cos(omega) + a2 * Math.cos(2 * omega); >+ let denominatorImag = >+ -(a1 * Math.sin(omega) + a2 * Math.sin(2 * omega)); >+ >+ let magnitude = Math.sqrt( >+ (numeratorReal * numeratorReal + numeratorImag * numeratorImag) / >+ (denominatorReal * denominatorReal + >+ denominatorImag * denominatorImag)); >+ let phase = Math.atan2(numeratorImag, numeratorReal) - >+ Math.atan2(denominatorImag, denominatorReal); >+ >+ if (phase >= Math.PI) { >+ phase -= 2 * Math.PI; >+ } else if (phase <= -Math.PI) { >+ phase += 2 * Math.PI; >+ } >+ >+ return {magnitude: magnitude, phase: phase}; >+ } >+ >+ // Compute the reference frequency response for the biquad filter |filter| >+ // at the frequency samples given by |frequencies|. >+ function frequencyResponseReference(filter, frequencies) { >+ let sampleRate = filter.context.sampleRate; >+ let normalizedFreq = >+ normalizedFrequency(filter.frequency.value, sampleRate); >+ let filterCoefficients = createFilter( >+ filter.type, normalizedFreq, filter.Q.value, filter.gain.value); >+ >+ let magnitudes = []; >+ let phases = []; >+ >+ for (let k = 0; k < frequencies.length; ++k) { >+ let response = getResponseAt( >+ filterCoefficients, >+ normalizedFrequency(frequencies[k], sampleRate)); >+ magnitudes.push(response.magnitude); >+ phases.push(response.phase); >+ } >+ >+ return {magnitudes: magnitudes, phases: phases}; >+ } >+ >+ // Compute a set of linearly spaced frequencies. >+ function createFrequencies(nFrequencies, sampleRate) { >+ let frequencies = new Float32Array(nFrequencies); >+ let nyquist = sampleRate / 2; >+ let freqDelta = nyquist / nFrequencies; >+ >+ for (let k = 0; k < nFrequencies; ++k) { >+ frequencies[k] = k * freqDelta; >+ } >+ >+ return frequencies; >+ } >+ >+ function linearToDecibels(x) { >+ if (x) { >+ return 20 * Math.log(x) / Math.LN10; >+ } else { >+ return -1000; >+ } >+ } >+ >+ // Look through the array and find any NaN or infinity. Returns the index >+ // of the first occurence or -1 if none. >+ function findBadNumber(signal) { >+ for (let k = 0; k < signal.length; ++k) { >+ if (!isValidNumber(signal[k])) { >+ return k; >+ } >+ } >+ return -1; >+ } >+ >+ // Compute absolute value of the difference between phase angles, taking >+ // into account the wrapping of phases. >+ function absolutePhaseDifference(x, y) { >+ let diff = Math.abs(x - y); >+ >+ if (diff > Math.PI) { >+ diff = 2 * Math.PI - diff; >+ } >+ return diff; >+ } >+ >+ // Compare the frequency response with our expected response. >+ function compareResponses( >+ should, filter, frequencies, magResponse, phaseResponse) { >+ let expectedResponse = frequencyResponseReference(filter, frequencies); >+ >+ expectedMagnitudes = expectedResponse.magnitudes; >+ expectedPhases = expectedResponse.phases; >+ >+ let n = magResponse.length; >+ let badResponse = false; >+ >+ let maxMagError = -1; >+ let maxMagErrorIndex = -1; >+ >+ let k; >+ let hasBadNumber; >+ >+ hasBadNumber = findBadNumber(magResponse); >+ badResponse = !should( >+ hasBadNumber >= 0 ? 1 : 0, >+ 'Number of non-finite values in magnitude response') >+ .beEqualTo(0); >+ >+ hasBadNumber = findBadNumber(phaseResponse); >+ badResponse = !should( >+ hasBadNumber >= 0 ? 1 : 0, >+ 'Number of non-finte values in phase response') >+ .beEqualTo(0); >+ >+ // These aren't testing the implementation itself. Instead, these are >+ // sanity checks on the reference. Failure here does not imply an error >+ // in the implementation. >+ hasBadNumber = findBadNumber(expectedMagnitudes); >+ badResponse = >+ !should( >+ hasBadNumber >= 0 ? 1 : 0, >+ 'Number of non-finite values in the expected magnitude response') >+ .beEqualTo(0); >+ >+ hasBadNumber = findBadNumber(expectedPhases); >+ badResponse = >+ !should( >+ hasBadNumber >= 0 ? 1 : 0, >+ 'Number of non-finite values in expected phase response') >+ .beEqualTo(0); >+ >+ // If we found a NaN or infinity, the following tests aren't very >+ // helpful, especially for NaN. We run them anyway, after printing a >+ // warning message. >+ should( >+ !badResponse, >+ 'Actual and expected results contained only finite values') >+ .beTrue(); >+ >+ for (k = 0; k < n; ++k) { >+ let error = Math.abs( >+ linearToDecibels(magResponse[k]) - >+ linearToDecibels(expectedMagnitudes[k])); >+ if (error > maxMagError) { >+ maxMagError = error; >+ maxMagErrorIndex = k; >+ } >+ } >+ >+ should( >+ linearToDecibels(maxMagError), >+ 'Max error (' + linearToDecibels(maxMagError) + >+ ' dB) of magnitude response at frequency ' + >+ frequencies[maxMagErrorIndex] + ' Hz') >+ .beLessThanOrEqualTo(linearToDecibels(maxAllowedMagError)); >+ let maxPhaseError = -1; >+ let maxPhaseErrorIndex = -1; >+ >+ for (k = 0; k < n; ++k) { >+ let error = >+ absolutePhaseDifference(phaseResponse[k], expectedPhases[k]); >+ if (error > maxPhaseError) { >+ maxPhaseError = error; >+ maxPhaseErrorIndex = k; >+ } >+ } >+ >+ should( >+ radToDegree(maxPhaseError), >+ 'Max error (' + radToDegree(maxPhaseError) + >+ ' deg) in phase response at frequency ' + >+ frequencies[maxPhaseErrorIndex] + ' Hz') >+ .beLessThanOrEqualTo(radToDegree(maxAllowedPhaseError)); >+ } >+ >+ function radToDegree(rad) { >+ // Radians to degrees >+ return rad * 180 / Math.PI; >+ } >+ >+ audit.define( >+ {label: 'test', description: 'Biquad frequency response'}, >+ function(task, should) { >+ context = new AudioContext(); >+ >+ filter = context.createBiquadFilter(); >+ >+ // Arbitrarily test a peaking filter, but any kind of filter can be >+ // tested. >+ filter.type = 'peaking'; >+ filter.frequency.value = filterCutoff; >+ filter.Q.value = filterQ; >+ filter.gain.value = filterGain; >+ >+ let frequencies = >+ createFrequencies(numberOfFrequencies, context.sampleRate); >+ magResponse = new Float32Array(numberOfFrequencies); >+ phaseResponse = new Float32Array(numberOfFrequencies); >+ >+ filter.getFrequencyResponse( >+ frequencies, magResponse, phaseResponse); >+ compareResponses( >+ should, filter, frequencies, magResponse, phaseResponse); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ { >+ label: 'getFrequencyResponse', >+ description: 'Test out-of-bounds frequency values' >+ }, >+ (task, should) => { >+ let context = new OfflineAudioContext(1, 1, sampleRate); >+ let filter = new BiquadFilterNode(context); >+ >+ // Frequencies to test. These are all outside the valid range of >+ // frequencies of 0 to Nyquist. >+ let freq = new Float32Array(2); >+ freq[0] = -1; >+ freq[1] = context.sampleRate / 2 + 1; >+ >+ let mag = new Float32Array(freq.length); >+ let phase = new Float32Array(freq.length); >+ >+ filter.getFrequencyResponse(freq, mag, phase); >+ >+ // Verify that the returned magnitude and phase entries are alL NaN >+ // since the frequencies are outside the valid range >+ for (let k = 0; k < mag.length; ++k) { >+ should(mag[k], >+ 'Magnitude response at frequency ' + freq[k]) >+ .beNaN(); >+ } >+ >+ for (let k = 0; k < phase.length; ++k) { >+ should(phase[k], >+ 'Phase response at frequency ' + freq[k]) >+ .beNaN(); >+ } >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0a9ae59d3203c2e9e43121341c0db92ac44f63f8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad highpass filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass.html >new file mode 100644 >index 0000000000000000000000000000000000000000..45c335bc4b894838a28f6aa6c452d4b6a98c824a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass.html >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-highpass.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad highpass filter'}, >+ function(task, should) { >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 1, gain: 1}, >+ {cutoff: 1, q: 1, gain: 1}, >+ {cutoff: 0.25, q: 1, gain: 1}, >+ ]; >+ >+ createTestAndRun(context, 'highpass', { >+ should: should, >+ threshold: 1.5487e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9192e9e1d6ba102e6997e3de184bac962a31efde >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad highshelf filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf.html >new file mode 100644 >index 0000000000000000000000000000000000000000..345195f104e673e0e2481481f0b5e4cd5dbc0dea >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf.html >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-highshelf.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad highshelf filter'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 10, gain: 10}, >+ {cutoff: 1, q: 10, gain: 10}, >+ {cutoff: 0.25, q: 10, gain: 10}, >+ ]; >+ >+ createTestAndRun(context, 'highshelf', { >+ should: should, >+ threshold: 6.2577e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0bcd4af4530d6df6f7c24fdba559af2a6ce8e7ff >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad lowpass filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d20786e36b16d7ba36841dd5fcfb30c081113fb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass.html >@@ -0,0 +1,45 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-lowpass.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad lowpass filter'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 1, gain: 1}, >+ {cutoff: 1, q: 1, gain: 1}, >+ {cutoff: 0.25, q: 1, gain: 1}, >+ {cutoff: 0.25, q: 1, gain: 1, detune: 100}, >+ {cutoff: 0.01, q: 1, gain: 1, detune: -200}, >+ ]; >+ >+ createTestAndRun(context, 'lowpass', { >+ should: should, >+ threshold: 9.7869e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..b03f5e0b8baec05becf5f8027aea6ee837cb6b5b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad lowshelf filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ab76cefd4bc3de478a2c450638b8adf5de5a929c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf.html >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-lowshelf.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad lowshelf filter'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 10, gain: 10}, >+ {cutoff: 1, q: 10, gain: 10}, >+ {cutoff: 0.25, q: 10, gain: 10}, >+ ]; >+ >+ createTestAndRun(context, 'lowshelf', { >+ should: should, >+ threshold: 3.8349e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f5b9ef6bb78728518d8cb3439769a61dd443f6f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad notch filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch.html >new file mode 100644 >index 0000000000000000000000000000000000000000..98e6e6e02c0813692c579821b48b84959cb89367 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch.html >@@ -0,0 +1,43 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-notch.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad notch filter'}, >+ function(task, should) { >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ let filterParameters = [ >+ {cutoff: 0, q: 10, gain: 1}, >+ {cutoff: 1, q: 10, gain: 1}, >+ {cutoff: .5, q: 0, gain: 1}, >+ {cutoff: 0.25, q: 10, gain: 1}, >+ ]; >+ >+ createTestAndRun(context, 'notch', { >+ should: should, >+ threshold: 1.9669e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d6ec32237071a2c515b9f6775c981480db7b17a1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 82: TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.startRendering().then') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad peaking filter >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking.html >new file mode 100644 >index 0000000000000000000000000000000000000000..90b7c1546de30e1099379e1672ea48edca7c6ba4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-peaking.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ <script src="/webaudio/resources/biquad-testing.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Biquad peaking filter'}, >+ function(task, should) { >+ >+ window.jsTestIsAsync = true; >+ >+ // Create offline audio context. >+ let context = new OfflineAudioContext( >+ 2, sampleRate * renderLengthSeconds, sampleRate); >+ >+ // The filters we want to test. >+ let filterParameters = [ >+ {cutoff: 0, q: 10, gain: 10}, >+ {cutoff: 1, q: 10, gain: 10}, >+ {cutoff: .5, q: 0, gain: 10}, >+ {cutoff: 0.25, q: 10, gain: 10}, >+ ]; >+ >+ createTestAndRun(context, 'peaking', { >+ should: should, >+ threshold: 5.8234e-8, >+ filterParameters: filterParameters >+ }).then(task.done.bind(task)); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..017cf25bc53bb5d0a29189ef9c92be9b4b525e83 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 43: SyntaxError: The string did not match the expected pattern. >+ >+Harness Error (FAIL), message = SyntaxError: The string did not match the expected pattern. >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Biquad Tail Output >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html >new file mode 100644 >index 0000000000000000000000000000000000000000..3141bf7ff31fd39101e0635ad4febdd090f679eb >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html >@@ -0,0 +1,71 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Biquad Tail Output >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // A high sample rate shows the issue more clearly. >+ let sampleRate = 192000; >+ // Some short duration because we don't need to run the test for very >+ // long. >+ let testDurationSec = 0.5; >+ let testDurationFrames = testDurationSec * sampleRate; >+ >+ // Amplitude experimentally determined to give a biquad output close to 1. >+ // (No attempt was made to produce exactly 1; it's not needed.) >+ let sourceAmplitude = 100; >+ >+ // The output of the biquad filter should not change by more than this >+ // much between output samples. Threshold was determined experimentally. >+ let glitchThreshold = 0.012968; >+ >+ // Test that a Biquad filter doesn't have it's output terminated because >+ // the input has gone away. Generally, when a source node is finished, it >+ // disconnects itself from any downstream nodes. This is the correct >+ // behavior. Nodes that have no inputs (disconnected) are generally >+ // assumed to output zeroes. This is also desired behavior. However, >+ // biquad filters have memory so they should not suddenly output zeroes >+ // when the input is disconnected. This test checks to see if the output >+ // doesn't suddenly change to zero. >+ audit.define( >+ {label: 'test', description: 'Biquad Tail Output'}, >+ function(task, should) { >+ let context = >+ new OfflineAudioContext(1, testDurationFrames, sampleRate); >+ >+ // Create an impulse source. >+ let buffer = context.createBuffer(1, 1, context.sampleRate); >+ buffer.getChannelData(0)[0] = sourceAmplitude; >+ let source = context.createBufferSource(); >+ source.buffer = buffer; >+ >+ // Create the biquad filter. It doesn't really matter what kind, so >+ // the default filter type and parameters is fine. Connect the >+ // source to it. >+ let biquad = context.createBiquadFilter(); >+ source.connect(biquad); >+ biquad.connect(context.destination); >+ >+ source.start(); >+ >+ context.startRendering().then(function(result) { >+ // There should be no large discontinuities in the output >+ should(result.getChannelData(0), 'Biquad output') >+ .notGlitch(glitchThreshold); >+ task.done(); >+ }) >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..eb445ee7638dbb106cd5bd1019b3d71e395f1e39 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic-expected.txt >@@ -0,0 +1,29 @@ >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [test] Basic tests for BiquadFilterNode >+PASS Number of inputs is equal to 1. >+PASS Number of outputs is equal to 1. >+PASS Default filter type is equal to lowpass. >+PASS Default frequency value is equal to 350. >+PASS Default Q value is equal to 1. >+PASS Default gain value is equal to 0. >+PASS Setting filter.type to lowpass did not throw an exception. >+PASS Filter type is is equal to lowpass. >+PASS Setting filter.type to highpass did not throw an exception. >+PASS Filter type is is equal to highpass. >+PASS Setting filter.type to bandpass did not throw an exception. >+PASS Filter type is is equal to bandpass. >+PASS Setting filter.type to lowshelf did not throw an exception. >+PASS Filter type is is equal to lowshelf. >+PASS Setting filter.type to highshelf did not throw an exception. >+PASS Filter type is is equal to highshelf. >+PASS Setting filter.type to peaking did not throw an exception. >+PASS Filter type is is equal to peaking. >+PASS Setting filter.type to notch did not throw an exception. >+PASS Filter type is is equal to notch. >+PASS Setting filter.type to allpass did not throw an exception. >+PASS Filter type is is equal to allpass. >+PASS Setting filter.type to (invalid) 99 is not equal to 99. >+PASS < [test] All assertions passed. (total 23 assertions) >+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7e71d073024cb2040b7a4d7ea5ff681f803e21b0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic.html >@@ -0,0 +1,64 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquadfilternode-basic.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define( >+ {label: 'test', description: 'Basic tests for BiquadFilterNode'}, >+ function(task, should) { >+ >+ let context = new AudioContext(); >+ let filter = context.createBiquadFilter(); >+ >+ should(filter.numberOfInputs, 'Number of inputs').beEqualTo(1); >+ >+ should(filter.numberOfOutputs, 'Number of outputs').beEqualTo(1); >+ >+ should(filter.type, 'Default filter type').beEqualTo('lowpass'); >+ >+ should(filter.frequency.value, 'Default frequency value') >+ .beEqualTo(350); >+ >+ should(filter.Q.value, 'Default Q value').beEqualTo(1); >+ >+ should(filter.gain.value, 'Default gain value').beEqualTo(0); >+ >+ // Check that all legal filter types can be set. >+ let filterTypeArray = [ >+ {type: 'lowpass'}, {type: 'highpass'}, {type: 'bandpass'}, >+ {type: 'lowshelf'}, {type: 'highshelf'}, {type: 'peaking'}, >+ {type: 'notch'}, {type: 'allpass'} >+ ]; >+ >+ for (let i = 0; i < filterTypeArray.length; ++i) { >+ should( >+ () => filter.type = filterTypeArray[i].type, >+ 'Setting filter.type to ' + filterTypeArray[i].type) >+ .notThrow(); >+ should(filter.type, 'Filter type is') >+ .beEqualTo(filterTypeArray[i].type); >+ } >+ >+ >+ // Check that numerical values are no longer supported >+ filter.type = 99; >+ should(filter.type, 'Setting filter.type to (invalid) 99') >+ .notBeEqualTo(99); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..4138bb89245a0498bed0ee606086953dbc8b3488 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new BiquadFilterNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new BiquadFilterNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new BiquadFilterNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new BiquadFilterNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof BiquadFilterNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e63479f985920745f75b857fa7b639417d5bf208 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html >@@ -0,0 +1,86 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: BiquadFilter >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'BiquadFilterNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'BiquadFilterNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'type', value: 'lowpass'}, {name: 'Q', value: 1}, >+ {name: 'detune', value: 0}, {name: 'frequency', value: 350}, >+ {name: 'gain', value: 0.0} >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'BiquadFilterNode'); >+ task.done(); >+ }); >+ >+ audit.define('construct with options', (task, should) => { >+ let node; >+ let options = { >+ type: 'highpass', >+ frequency: 512, >+ detune: 1, >+ Q: 5, >+ gain: 3, >+ }; >+ >+ should( >+ () => { >+ node = new BiquadFilterNode(context, options); >+ }, >+ 'node = new BiquadFilterNode(..., ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ // Test that attributes are set according to the option values. >+ should(node.type, 'node.type').beEqualTo(options.type); >+ should(node.frequency.value, 'node.frequency.value') >+ .beEqualTo(options.frequency); >+ should(node.detune.value, 'node.detuen.value') >+ .beEqualTo(options.detune); >+ should(node.Q.value, 'node.Q.value').beEqualTo(options.Q); >+ should(node.gain.value, 'node.gain.value').beEqualTo(options.gain); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6619b02a981a84295bd086dbe02d0051e22111c6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering-expected.txt >@@ -0,0 +1,7 @@ >+CONSOLE MESSAGE: line 199: SyntaxError: The string did not match the expected pattern. >+ >+Harness Error (FAIL), message = SyntaxError: The string did not match the expected pattern. >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [Test 0] No dezippering for frequency >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d54bc0bd8abe5f65bbfa618c76c286be78b9a6ac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html >@@ -0,0 +1,288 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ biquad-bandpass.html >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/biquad-filters.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let audit = Audit.createTaskRunner(); >+ >+ // In the tests below, the initial values are not important, except that >+ // we wanted them to be all different so that the output contains >+ // different values for the first few samples. Otherwise, the actual >+ // values don't really matter. A peaking filter is used because the >+ // frequency, Q, gain, and detune parameters are used by this filter. >+ // >+ // Also, for the changeList option, the times and new values aren't really >+ // important. They just need to change so that we can verify that the >+ // outputs from the .value setter still matches the output from the >+ // corresponding setValueAtTime. >+ audit.define( >+ {label: 'Test 0', description: 'No dezippering for frequency'}, >+ (task, should) => { >+ doTest(should, { >+ paramName: 'frequency', >+ initializer: {type: 'peaking', Q: 1, gain: 5}, >+ changeList: >+ [{quantum: 2, newValue: 800}, {quantum: 7, newValue: 200}], >+ threshold: 3.0399e-6 >+ }).then(() => task.done()); >+ }); >+ >+ audit.define( >+ {label: 'Test 1', description: 'No dezippering for detune'}, >+ (task, should) => { >+ doTest(should, { >+ paramName: 'detune', >+ initializer: >+ {type: 'peaking', frequency: 400, Q: 3, detune: 33, gain: 10}, >+ changeList: >+ [{quantum: 2, newValue: 1000}, {quantum: 5, newValue: -400}], >+ threshold: 4.0532e-6 >+ }).then(() => task.done()); >+ }); >+ >+ audit.define( >+ {label: 'Test 2', description: 'No dezippering for Q'}, >+ (task, should) => { >+ doTest(should, { >+ paramName: 'Q', >+ initializer: {type: 'peaking', Q: 5}, >+ changeList: >+ [{quantum: 2, newValue: 10}, {quantum: 8, newValue: -10}] >+ }).then(() => task.done()); >+ }); >+ >+ audit.define( >+ {label: 'Test 3', description: 'No dezippering for gain'}, >+ (task, should) => { >+ doTest(should, { >+ paramName: 'gain', >+ initializer: {type: 'peaking', gain: 1}, >+ changeList: >+ [{quantum: 2, newValue: 5}, {quantum: 6, newValue: -.3}], >+ threshold: 1.9074e-6 >+ }).then(() => task.done()); >+ }); >+ >+ // This test compares the filter output against a JS implementation of the >+ // filter. We're only testing a change in the frequency for a lowpass >+ // filter. This assumes we don't need to test other AudioParam changes >+ // with JS code because any mistakes would be exposed in the tests above. >+ audit.define( >+ { >+ label: 'Test 4', >+ description: 'No dezippering of frequency vs JS filter' >+ }, >+ (task, should) => { >+ // Channel 0 is the source, channel 1 is the filtered output. >+ let context = new OfflineAudioContext(2, 2048, 16384); >+ >+ let merger = new ChannelMergerNode( >+ context, {numberOfInputs: context.destination.channelCount}); >+ merger.connect(context.destination); >+ >+ let src = new OscillatorNode(context); >+ let f = new BiquadFilterNode(context, {type: 'lowpass'}); >+ >+ // Remember the initial filter parameters. >+ let initialFilter = { >+ type: f.type, >+ frequency: f.frequency.value, >+ gain: f.gain.value, >+ detune: f.detune.value, >+ Q: f.Q.value >+ }; >+ >+ src.connect(merger, 0, 0); >+ src.connect(f).connect(merger, 0, 1); >+ >+ // Apply the filter change at frame |changeFrame| with a new >+ // frequency value of |newValue|. >+ let changeFrame = 2 * RENDER_QUANTUM_FRAMES; >+ let newValue = 750; >+ >+ context.suspend(changeFrame / context.sampleRate) >+ .then(() => f.frequency.value = newValue) >+ .then(() => context.resume()); >+ >+ src.start(); >+ >+ context.startRendering() >+ .then(audio => { >+ let signal = audio.getChannelData(0); >+ let actual = audio.getChannelData(1); >+ >+ // Get initial filter coefficients and updated coefficients >+ let nyquistFreq = context.sampleRate / 2; >+ let initialCoef = createFilter( >+ initialFilter.type, initialFilter.frequency / nyquistFreq, >+ initialFilter.Q, initialFilter.gain); >+ >+ let finalCoef = createFilter( >+ f.type, f.frequency.value / nyquistFreq, f.Q.value, >+ f.gain.value); >+ >+ let expected = new Float32Array(signal.length); >+ >+ // Filter the initial part of the signal. >+ expected[0] = >+ filterSample(signal[0], initialCoef, 0, 0, 0, 0); >+ expected[1] = filterSample( >+ signal[1], initialCoef, expected[0], 0, signal[0], 0); >+ >+ for (let k = 2; k < changeFrame; ++k) { >+ expected[k] = filterSample( >+ signal[k], initialCoef, expected[k - 1], >+ expected[k - 2], signal[k - 1], signal[k - 2]); >+ } >+ >+ // Filter the rest of the input with the new coefficients >+ for (let k = changeFrame; k < signal.length; ++k) { >+ expected[k] = filterSample( >+ signal[k], finalCoef, expected[k - 1], expected[k - 2], >+ signal[k - 1], signal[k - 2]); >+ } >+ >+ // The JS filter should match the actual output. >+ let match = >+ should(actual, 'Output from ' + f.type + ' filter') >+ .beCloseToArray( >+ expected, {absoluteThreshold: 4.7684e-7}); >+ should(match, 'Output matches JS filter results').beTrue(); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.define( >+ {label: 'Test 5', description: 'Test with modulation'}, >+ (task, should) => { >+ doTest(should, { >+ prefix: 'Modulation: ', >+ paramName: 'frequency', >+ initializer: {type: 'peaking', Q: 5, gain: 5}, >+ modulation: true, >+ changeList: >+ [{quantum: 2, newValue: 10}, {quantum: 8, newValue: -10}] >+ }).then(() => task.done()); >+ >+ }); >+ >+ audit.run(); >+ >+ // Run test, returning the promise from startRendering. |options| >+ // specifies the parameters for the test. |options.paramName| is the name >+ // of the AudioParam of the filter that is being tested. >+ // |options.initializer| is the initial value to be used in constructing >+ // the filter. |options.changeList| is an array consisting of dictionary >+ // with two members: |quantum| is the rendering quantum at which time we >+ // want to change the AudioParam value, and |newValue| is the value to be >+ // used. >+ function doTest(should, options) { >+ let paramName = options.paramName; >+ let newValue = options.newValue; >+ let prefix = options.prefix || ''; >+ >+ // Create offline audio context. The sample rate should be a power of >+ // two to eliminate any round-off errors in computing the time at which >+ // to suspend the context for the parameter change. The length is >+ // fairly arbitrary as long as it's big enough to the changeList >+ // values. There are two channels: channel 0 is output for the filter >+ // under test, and channel 1 is the output of referencef filter. >+ let context = new OfflineAudioContext(2, 2048, 16384); >+ >+ let merger = new ChannelMergerNode( >+ context, {numberOfInputs: context.destination.channelCount}); >+ merger.connect(context.destination); >+ >+ let src = new OscillatorNode(context); >+ >+ // |f0| is the filter under test that will have its AudioParam value >+ // changed. |f1| is the reference filter that uses setValueAtTime to >+ // update the AudioParam value. >+ let f0 = new BiquadFilterNode(context, options.initializer); >+ let f1 = new BiquadFilterNode(context, options.initializer); >+ >+ src.connect(f0).connect(merger, 0, 0); >+ src.connect(f1).connect(merger, 0, 1); >+ >+ // Modulate the AudioParam with an input signal, if requested. >+ if (options.modulation) { >+ // The modulation signal is a sine wave with amplitude 1/3 the cutoff >+ // frequency of the test filter. The amplitude is fairly arbitrary, >+ // but we want it to be a significant fraction of the cutoff so that >+ // the cutoff varies quite a bit in the test. >+ let mod = >+ new OscillatorNode(context, {type: 'sawtooth', frequency: 1000}); >+ let modGain = new GainNode(context, {gain: f0.frequency.value / 3}); >+ mod.connect(modGain); >+ modGain.connect(f0[paramName]); >+ modGain.connect(f1[paramName]); >+ mod.start(); >+ } >+ // Output a message showing where we're starting from. >+ should(f0[paramName].value, prefix + `At time 0, ${paramName}`) >+ .beEqualTo(f0[paramName].value); >+ >+ // Schedule all of the desired changes from |changeList|. >+ options.changeList.forEach(change => { >+ let changeTime = >+ change.quantum * RENDER_QUANTUM_FRAMES / context.sampleRate; >+ let value = change.newValue; >+ >+ // Just output a message to show what we're doing. >+ should(value, prefix + `At time ${changeTime}, ${paramName}`) >+ .beEqualTo(value); >+ >+ // Update the AudioParam value of each filter using setValueAtTime or >+ // the value setter. >+ f1[paramName].setValueAtTime(value, changeTime); >+ context.suspend(changeTime) >+ .then(() => f0[paramName].value = value) >+ .then(() => context.resume()); >+ }); >+ >+ src.start(); >+ >+ return context.startRendering().then(audio => { >+ let actual = audio.getChannelData(0); >+ let expected = audio.getChannelData(1); >+ >+ // The output from both filters MUST match exactly if dezippering has >+ // been properly removed. >+ let match = should(actual, `${prefix}Output from ${paramName} setter`) >+ .beCloseToArray( >+ expected, {absoluteThreshold: options.threshold}); >+ >+ // Just an extra message saying that what we're comparing, to make the >+ // output clearer. (Not really neceesary, but nice.) >+ should( >+ match, >+ `${prefix}Output from ${ >+ paramName >+ } setter matches setValueAtTime output`) >+ .beTrue(); >+ }); >+ } >+ >+ // Filter one sample: >+ // >+ // y[n] = b0 * x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n-2] >+ // >+ // where |x| is x[n], |xn1| is x[n-1], |xn2| is x[n-2], |yn1| is y[n-1], >+ // and |yn2| is y[n-2]. |coef| is a dictonary of the filter coefficients >+ // |b0|, |b1|, |b2|, |a1|, and |a2|. >+ function filterSample(x, coef, yn1, yn2, xn1, xn2) { >+ return coef.b0 * x + coef.b1 * xn1 + coef.b2 * xn2 - coef.a1 * yn1 - >+ coef.a2 * yn2; >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..2630fe7a26a25c329b0ae6e1d1b56464b9ecd591 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/w3c-import.log >@@ -0,0 +1,31 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-allpass.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-automation.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-bandpass.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highpass.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-highshelf.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowpass.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-lowshelf.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-notch.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-peaking.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquadfilternode-basic.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/no-dezippering.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..caf254e8e08d7b7007cc8c13e0527bf4c60e1e63 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new ChannelMergerNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new ChannelMergerNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new ChannelMergerNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new ChannelMergerNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof ChannelMergerNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html >new file mode 100644 >index 0000000000000000000000000000000000000000..115bd9943490ab09efbff70239167911eb83d933 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html >@@ -0,0 +1,109 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: ChannelMerger >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'ChannelMergerNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = >+ testDefaultConstructor(should, 'ChannelMergerNode', context, { >+ prefix: prefix, >+ numberOfInputs: 6, >+ numberOfOutputs: 1, >+ channelCount: 1, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'speakers' >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'ChannelMergerNode', { >+ channelCount: >+ {value: 1, isFixed: true, errorType: 'InvalidStateError'}, >+ channelCountMode: { >+ value: 'explicit', >+ isFixed: true, >+ errorType: 'InvalidStateError' >+ } >+ }); >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ let options = { >+ numberOfInputs: 3, >+ numberOfOutputs: 9, >+ channelInterpretation: 'discrete' >+ }; >+ >+ should( >+ () => { >+ node = new ChannelMergerNode(context, options); >+ }, >+ 'node1 = new ChannelMergerNode(context, ' + >+ JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(node.numberOfInputs, 'node1.numberOfInputs') >+ .beEqualTo(options.numberOfInputs); >+ should(node.numberOfOutputs, 'node1.numberOfOutputs').beEqualTo(1); >+ should(node.channelInterpretation, 'node1.channelInterpretation') >+ .beEqualTo(options.channelInterpretation); >+ >+ options = {numberOfInputs: 99}; >+ should( >+ () => { >+ node = new ChannelMergerNode(context, options); >+ }, >+ 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('IndexSizeError'); >+ >+ options = {channelCount: 3}; >+ should( >+ () => { >+ node = new ChannelMergerNode(context, options); >+ }, >+ 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('InvalidStateError'); >+ >+ options = {channelCountMode: 'max'}; >+ should( >+ () => { >+ node = new ChannelMergerNode(context, options); >+ }, >+ 'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('InvalidStateError'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/w3c-import.log >index 02834d5f5f555d709cea8381a5628edd72cbab87..e3baf47c022a6c11bd7f1b14006daa7b4093d2c9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/w3c-import.log >@@ -18,3 +18,4 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-input-non-default.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-input.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d0672b1bf55b3507f7b826ae651a84c3d0a95baa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new ChannelSplitterNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new ChannelSplitterNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new ChannelSplitterNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new ChannelSplitterNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof ChannelSplitterNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7fa9d6fa5466d2fbfeec8bbcf0718b80b52d2298 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html >@@ -0,0 +1,111 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: ChannelSplitter >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'ChannelSplitterNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ testDefaultConstructor(should, 'ChannelSplitterNode', context, { >+ prefix: 'node0', >+ numberOfInputs: 1, >+ numberOfOutputs: 6, >+ channelCount: 6, >+ channelCountMode: 'explicit', >+ channelInterpretation: 'discrete' >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'ChannelSplitterNode', { >+ channelCount: >+ {value: 6, isFixed: true, errorType: 'InvalidStateError'}, >+ channelCountMode: { >+ value: 'explicit', >+ isFixed: true, >+ }, >+ channelInterpretation: { >+ value: 'discrete', >+ isFixed: true, >+ errorType: 'InvalidStateError' >+ }, >+ }); >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ let options = { >+ numberOfInputs: 3, >+ numberOfOutputs: 9, >+ channelInterpretation: 'discrete' >+ }; >+ >+ should( >+ () => { >+ node = new ChannelSplitterNode(context, options); >+ }, >+ 'node1 = new ChannelSplitterNode(context, ' + >+ JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(node.numberOfInputs, 'node1.numberOfInputs').beEqualTo(1); >+ should(node.numberOfOutputs, 'node1.numberOfOutputs') >+ .beEqualTo(options.numberOfOutputs); >+ should(node.channelInterpretation, 'node1.channelInterpretation') >+ .beEqualTo(options.channelInterpretation); >+ >+ options = {numberOfOutputs: 99}; >+ should( >+ () => { >+ node = new ChannelSplitterNode(context, options); >+ }, >+ 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') >+ .throw('IndexSizeError'); >+ >+ options = {channelCount: 3}; >+ should( >+ () => { >+ node = new ChannelSplitterNode(context, options); >+ }, >+ 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') >+ .throw('InvalidStateError'); >+ >+ options = {channelCountMode: 'max'}; >+ should( >+ () => { >+ node = new ChannelSplitterNode(context, options); >+ }, >+ 'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')') >+ .throw('InvalidStateError'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/w3c-import.log >index 1eaf5b405db6af984f4eec38ef60357a8e037d87..adaa9541a57b7f0c4b5e05be8407f1e21846f08d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/w3c-import.log >@@ -15,3 +15,4 @@ None > ------------------------------------------------------------------------ > List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9ffa6ef8a27f1668b8df0a65eac624b8eb28e1b2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource-expected.txt >@@ -0,0 +1,16 @@ >+CONSOLE MESSAGE: line 225: TypeError: Right hand side of instanceof is not an object >+ >+Harness Error (FAIL), message = TypeError: Right hand side of instanceof is not an object >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new ConstantSourceNode() threw TypeError: "undefined is not a constructor (evaluating 'new window[name]()')". >+PASS new ConstantSourceNode(1) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](1)')". >+PASS new ConstantSourceNode(context, 42) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new ConstantSourceNode(context) incorrectly threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource.html >new file mode 100644 >index 0000000000000000000000000000000000000000..ea4a65e146babcdad6d1c5429a1250963d120378 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource.html >@@ -0,0 +1,50 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: ConstantSource >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'ConstantSourceNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = >+ testDefaultConstructor(should, 'ConstantSourceNode', context, { >+ prefix: prefix, >+ numberOfInputs: 0, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes( >+ should, node, prefix, [{name: 'offset', value: 1}]); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/w3c-import.log >index 3df039959ca8d23a9f41d8f3ea9d287092e8b05a..b1ced28b4b7e0340342290732b65bab21f07a059 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/w3c-import.log >@@ -17,4 +17,5 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-onended.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-output.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/ctor-constantsource.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f6d6a598d30083628503b4e32d566a55a592170c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new ConvolverNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new ConvolverNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new ConvolverNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new ConvolverNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof ConvolverNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cf818330060143078cacbecf77724244eee55cf8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html >@@ -0,0 +1,125 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: Convolver >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'ConvolverNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'ConvolverNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes( >+ should, node, prefix, >+ [{name: 'normalize', value: true}, {name: 'buffer', value: null}]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'ConvolverNode', { >+ channelCount: >+ {value: 2, isFixed: true, errorType: 'NotSupportedError'}, >+ channelCountMode: { >+ value: 'clamped-max', >+ isFixed: true, >+ errorType: 'NotSupportedError' >+ }, >+ }); >+ task.done(); >+ }); >+ >+ audit.define('nullable buffer', (task, should) => { >+ let node; >+ let options = {buffer: null}; >+ >+ should( >+ () => { >+ node = new ConvolverNode(context, options); >+ }, >+ 'node1 = new ConvolverNode(c, ' + JSON.stringify(options)) >+ .notThrow(); >+ >+ should(node.buffer, 'node1.buffer').beEqualTo(null); >+ >+ task.done(); >+ }); >+ >+ audit.define('construct with options', (task, should) => { >+ let buf = context.createBuffer(1, 1, context.sampleRate); >+ let options = {buffer: buf, disableNormalization: false}; >+ >+ let message = >+ 'node = new ConvolverNode(c, ' + JSON.stringify(options) + ')'; >+ >+ let node; >+ should(() => { >+ node = new ConvolverNode(context, options); >+ }, message).notThrow(); >+ >+ should(node instanceof ConvolverNode, 'node1 instanceOf ConvolverNode') >+ .beEqualTo(true); >+ should(node.buffer === options.buffer, 'node1.buffer === <buf>') >+ .beEqualTo(true); >+ should(node.normalize, 'node1.normalize') >+ .beEqualTo(!options.disableNormalization); >+ >+ options.buffer = null; >+ options.disableNormalization = true; >+ >+ message = >+ 'node2 = new ConvolverNode(, ' + JSON.stringify(options) + ')'; >+ >+ should(() => { >+ node = new ConvolverNode(context, options); >+ }, message).notThrow(); >+ should(node.buffer, 'node2.buffer').beEqualTo(null); >+ should(node.normalize, 'node2.normalize') >+ .beEqualTo(!options.disableNormalization); >+ >+ options.disableNormalization = false; >+ message = 'node3 = new ConvolverNode(context, ' + >+ JSON.stringify(options) + ')'; >+ >+ should(() => { >+ node = new ConvolverNode(context, options); >+ }, message).notThrow(); >+ should(node.buffer, 'node3.buffer').beEqualTo(null); >+ should(node.normalize, 'node3.normalize') >+ .beEqualTo(!options.disableNormalization); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/w3c-import.log >index 75ae8011b3f09be948d22f958c0447503552d951..d614c73f588eb712de80820f69de0c25b60feeff 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/w3c-import.log >@@ -21,3 +21,4 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-2-chan.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-response-4-chan.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..832523b5ecbaa320fba9a6312df0e3ae27b93bb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new DelayNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new DelayNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new DelayNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new DelayNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof DelayNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html >new file mode 100644 >index 0000000000000000000000000000000000000000..e7ccefc655364d20bb240beacc81a4f7a10806dd >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html >@@ -0,0 +1,76 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: Delay >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'DelayNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'DelayNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes( >+ should, node, prefix, [{name: 'delayTime', value: 0}]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'DelayNode'); >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ let options = { >+ delayTime: 0.5, >+ maxDelayTime: 1.5, >+ }; >+ >+ should( >+ () => { >+ node = new DelayNode(context, options); >+ }, >+ 'node1 = new DelayNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(node.delayTime.value, 'node1.delayTime.value') >+ .beEqualTo(options.delayTime); >+ should(node.delayTime.maxValue, 'node1.delayTime.maxValue') >+ .beEqualTo(options.maxDelayTime); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test-expected.txt >deleted file mode 100644 >index 7f317fe6987faf7a30628664a2527a8f18a51aa5..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test-expected.txt >+++ /dev/null >@@ -1,36 +0,0 @@ >-dictionary DelayOptions : AudioNodeOptions { >- double maxDelayTime = 1; >- double delayTime = 0; >-}; >- >-[Constructor(BaseAudioContext context, optional DelayOptions options)] >-interface DelayNode : AudioNode { >- >- readonly attribute AudioParam delayTime; >- >-}; >- >-FAIL webaudio Delay interfaces promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >-[ >- { >- "type": "other", >- "value": "{" >- }, >- { >- "type": "string", >- "value": "\"error\"" >- }, >- { >- "type": "other", >- "value": ":" >- }, >- { >- "type": "whitespace", >- "value": " " >- }, >- { >- "type": "other", >- "value": "{" >- } >-]" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html >deleted file mode 100644 >index eb42a4a003c893c550f8453fda0cae041b3f121c..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html >+++ /dev/null >@@ -1,159 +0,0 @@ >-<!DOCTYPE html> >-<html class="a"> >-<head> >-<title>DelayNode IDL Test</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="/resources/idlharness.js"></script> >-<script src="/resources/WebIDLParser.js"></script> >-<script src="/webaudio/js/helpers.js"></script> >-<style type="text/css"> >- #event-target-idl, >- #base-audio-context-idl, >- #audio-node-idl, >- #audio-param-idl >- { visibility:hidden; height: 0px;} >- </style> >-</head> >-<body class="a"> >- >- <pre id="event-target-idl">interface EventTarget { >- void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false); >- void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false); >- boolean dispatchEvent(Event event); >-}; >- >-/* >-callback interface EventListener { >- void handleEvent(Event event); >-}; >-*/ >-// Callback interfaces are not supported yet, but that's ok >-interface EventListener {}; >-</pre> >- >- <pre id="base-audio-context-idl">callback DecodeErrorCallback = void (DOMException error); >- >-callback DecodeSuccessCallback = void (AudioBuffer decodedData); >- >-interface BaseAudioContext : EventTarget { >- readonly attribute AudioDestinationNode destination; >- readonly attribute float sampleRate; >- readonly attribute double currentTime; >- readonly attribute AudioListener listener; >- readonly attribute AudioContextState state; >- readonly attribute double baseLatency; >- Promise<void> resume (); >- attribute EventHandler onstatechange; >- AudioBuffer createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate); >- Promise<AudioBuffer> decodeAudioData (ArrayBuffer audioData, optional DecodeSuccessCallback successCallback, optional DecodeErrorCallback errorCallback); >- AudioBufferSourceNode createBufferSource (); >- ConstantSourceNode createConstantSource (); >- ScriptProcessorNode createScriptProcessor (optional unsigned long bufferSize = 0 >- , optional unsigned long numberOfInputChannels = 2 >- , optional unsigned long numberOfOutputChannels = 2 >- ); >- AnalyserNode createAnalyser (); >- GainNode createGain (); >- DelayNode createDelay (optional double maxDelayTime); >- BiquadFilterNode createBiquadFilter (); >- IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback); >- WaveShaperNode createWaveShaper (); >- PannerNode createPanner (); >- StereoPannerNode createStereoPanner (); >- ConvolverNode createConvolver (); >- ChannelSplitterNode createChannelSplitter (optional unsigned long numberOfOutputs = 6 >- ); >- ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6 >- ); >- DynamicsCompressorNode createDynamicsCompressor (); >- OscillatorNode createOscillator (); >- PeriodicWave createPeriodicWave (Float32Array real, Float32Array imag, optional PeriodicWaveConstraints constraints); >-};</pre> >- >- <pre id="audio-node-idl">enum ChannelCountMode { >- "max", >- "clamped-max", >- "explicit" >-}; >- >-enum ChannelInterpretation { >- "speakers", >- "discrete" >-}; >- >-interface AudioNode : EventTarget { >- >- void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0); >- void connect(AudioParam destination, optional unsigned long output = 0); >- void disconnect(optional unsigned long output = 0); >- >- readonly attribute BaseAudioContext context; >- readonly attribute unsigned long numberOfInputs; >- readonly attribute unsigned long numberOfOutputs; >- >- // Channel up-mixing and down-mixing rules for all inputs. >- attribute unsigned long channelCount; >- attribute ChannelCountMode channelCountMode; >- attribute ChannelInterpretation channelInterpretation; >- >-};</pre> >- >- <pre id="audio-param-idl">interface AudioParam { >- >- attribute float value; >- readonly attribute float defaultValue; >- readonly attribute float minValue; >- readonly attribute float maxValue; >- >- // Parameter automation. >- void setValueAtTime(float value, double startTime); >- void linearRampToValueAtTime(float value, double endTime); >- void exponentialRampToValueAtTime(float value, double endTime); >- >- // Exponentially approach the target value with a rate having the given time constant. >- void setTargetAtTime(float target, double startTime, double timeConstant); >- >- // Sets an array of arbitrary parameter values starting at time for the given duration. >- // The number of values will be scaled to fit into the desired duration. >- void setValueCurveAtTime(Float32Array values, double startTime, double duration); >- >- // Cancels all scheduled parameter changes with times greater than or equal to startTime. >- void cancelScheduledValues(double startTime); >- >-};</pre> >- >-<pre id="delay-node-idl">dictionary DelayOptions : AudioNodeOptions { >- double maxDelayTime = 1; >- double delayTime = 0; >-}; >- >-[Constructor(BaseAudioContext context, optional DelayOptions options)] >-interface DelayNode : AudioNode { >- >- readonly attribute AudioParam delayTime; >- >-};</pre> >- >- <div id="log"></div> >- >- <script> >-promise_test(async function() { >- const webAudioApi = await fetch('/interfaces/web-audio-api.idl').then(r => r.text()); >- >- var idl_array = new IdlArray(); >- idl_array.add_untested_idls(webAudioApi, { only: ['AudioNodeOptions']}); >- idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("audio-node-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("audio-param-idl").textContent); >- idl_array.add_idls(document.getElementById("delay-node-idl").textContent); >- >- delay_node = (new AudioContext).createDelay(); >- >- idl_array.add_objects({DelayNode: ["delay_node"]}); >- idl_array.test(); >-}, 'webaudio Delay interfaces'); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/w3c-import.log >index dac66d7b8a072dfb60a5de9bd0e9f29ba3f1d186..93fa03f695b0edb4c25349f111224ae72647a002 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/w3c-import.log >@@ -14,11 +14,11 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/ctor-delay.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-default-delay.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-max-nondefault-delay.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelay.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode.html >-/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..de441223564d5cd6d2be5235733653c53257a10e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new DynamicsCompressorNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new DynamicsCompressorNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new DynamicsCompressorNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new DynamicsCompressorNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof DynamicsCompressorNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html >new file mode 100644 >index 0000000000000000000000000000000000000000..799c1872f075e7f8541809c695509018bec4b0b7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html >@@ -0,0 +1,196 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: DynamicsCompressor >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'DynamicsCompressorNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = >+ testDefaultConstructor(should, 'DynamicsCompressorNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'threshold', value: -24}, {name: 'knee', value: 30}, >+ {name: 'ratio', value: 12}, {name: 'reduction', value: 0}, >+ {name: 'attack', value: Math.fround(0.003)}, >+ {name: 'release', value: 0.25} >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ // Can't use testAudioNodeOptions because the constraints for this node >+ // are not supported there. >+ >+ // Array of test options to be run. Each entry is a dictionary where >+ // |testAttribute| is the name of the attribute to be tested, >+ // |testValue| is the value to be used, and |expectedErrorType| is the >+ // error type if the test is expected to throw an error. >+ // |expectedErrorType| should be set only if the test does throw. >+ let testOptions = [ >+ // Test channel count >+ { >+ testAttribute: 'channelCount', >+ testValue: 1, >+ }, >+ { >+ testAttribute: 'channelCount', >+ testValue: 2, >+ }, >+ { >+ testAttribute: 'channelCount', >+ testValue: 0, >+ expectedErrorType: 'NotSupportedError' >+ }, >+ { >+ testAttribute: 'channelCount', >+ testValue: 3, >+ expectedErrorType: 'NotSupportedError' >+ }, >+ { >+ testAttribute: 'channelCount', >+ testValue: 99, >+ expectedErrorType: 'NotSupportedError' >+ }, >+ // Test channel count mode >+ { >+ testAttribute: 'channelCountMode', >+ testValue: 'clamped-max', >+ }, >+ { >+ testAttribute: 'channelCountMode', >+ testValue: 'explicit', >+ }, >+ { >+ testAttribute: 'channelCountMode', >+ testValue: 'max', >+ expectedErrorType: 'NotSupportedError' >+ }, >+ { >+ testAttribute: 'channelCountMode', >+ testValue: 'foobar', >+ expectedErrorType: 'TypeError' >+ }, >+ // Test channel interpretation >+ { >+ testAttribute: 'channelInterpretation', >+ testValue: 'speakers', >+ }, >+ { >+ testAttribute: 'channelInterpretation', >+ testValue: 'discrete', >+ }, >+ { >+ testAttribute: 'channelInterpretation', >+ testValue: 'foobar', >+ expectedErrorType: 'TypeError' >+ } >+ ]; >+ >+ testOptions.forEach((option) => { >+ let nodeOptions = {}; >+ nodeOptions[option.testAttribute] = option.testValue; >+ >+ testNode(should, context, { >+ nodeOptions: nodeOptions, >+ testAttribute: option.testAttribute, >+ expectedValue: option.testValue, >+ expectedErrorType: option.expectedErrorType >+ }); >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('constructor with options', (task, should) => { >+ let node; >+ let options = >+ {threshold: -33, knee: 15, ratio: 7, attack: 0.625, release: 0.125}; >+ >+ should( >+ () => { >+ node = new DynamicsCompressorNode(context, options); >+ }, >+ 'node1 = new DynamicsCompressorNode(c, ' + JSON.stringify(options) + >+ ')') >+ .notThrow(); >+ should( >+ node instanceof DynamicsCompressorNode, >+ 'node1 instanceof DynamicsCompressorNode') >+ .beEqualTo(true); >+ >+ should(node.threshold.value, 'node1.threshold.value') >+ .beEqualTo(options.threshold); >+ should(node.knee.value, 'node1.knee.value').beEqualTo(options.knee); >+ should(node.ratio.value, 'node1.ratio.value').beEqualTo(options.ratio); >+ should(node.attack.value, 'node1.attack.value') >+ .beEqualTo(options.attack); >+ should(node.release.value, 'node1.release.value') >+ .beEqualTo(options.release); >+ >+ should(node.channelCount, 'node1.channelCount').beEqualTo(2); >+ should(node.channelCountMode, 'node1.channelCountMode') >+ .beEqualTo('clamped-max'); >+ should(node.channelInterpretation, 'node1.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ >+ // Test possible options for DynamicsCompressor constructor. >+ function testNode(should, context, options) { >+ // Node to be tested >+ let node; >+ >+ let createNodeFunction = () => { >+ return () => node = >+ new DynamicsCompressorNode(context, options.nodeOptions); >+ }; >+ >+ let message = 'new DynamicsCompressorNode(c, ' + >+ JSON.stringify(options.nodeOptions) + ')'; >+ >+ if (options.expectedErrorType) { >+ should(createNodeFunction(), message) >+ .throw(options.expectedErrorType); >+ } else { >+ should(createNodeFunction(), message).notThrow(); >+ should(node[options.testAttribute], 'node.' + options.testAttribute) >+ .beEqualTo(options.expectedValue); >+ } >+ } >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/w3c-import.log >index 2aedf907a84669750be25c94a2bea08a90cb7551..c32eb784bf68f76c1983032b37766049de9ef5b7 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/w3c-import.log >@@ -14,4 +14,5 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..85633c260a638f0a862aa37c96c3c10a2b457ee8 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new GainNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new GainNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new GainNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new GainNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof GainNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain.html >new file mode 100644 >index 0000000000000000000000000000000000000000..dec273e9698702c5b1ee476a5c2e343bbc6e5bb6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain.html >@@ -0,0 +1,79 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: Gain >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'GainNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'GainNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [{name: 'gain', value: 1}]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'GainNode'); >+ task.done(); >+ }); >+ >+ audit.define('constructor with options', (task, should) => { >+ let node; >+ let options = { >+ gain: -2, >+ }; >+ >+ should( >+ () => { >+ node = new GainNode(context, options); >+ }, >+ 'node1 = new GainNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node instanceof GainNode, 'node1 instanceof GainNode') >+ .beEqualTo(true); >+ >+ should(node.gain.value, 'node1.gain.value').beEqualTo(options.gain); >+ >+ should(node.channelCount, 'node1.channelCount').beEqualTo(2); >+ should(node.channelCountMode, 'node1.channelCountMode') >+ .beEqualTo('max'); >+ should(node.channelInterpretation, 'node1.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test-expected.txt >deleted file mode 100644 >index 8996a3b50cae4169fc606d197d4d92d344dbe110..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test-expected.txt >+++ /dev/null >@@ -1,35 +0,0 @@ >-dictionary GainOptions : AudioNodeOptions { >- float gain = 1.0; >-}; >- >-[Constructor(BaseAudioContext context, optional GainOptions options)] >-interface GainNode : AudioNode { >- >- readonly attribute AudioParam gain; >- >-}; >- >-FAIL webaudio Gain interfaces promise_test: Unhandled rejection with value: object "Unrecognised tokens, line 1 (tokens: '{"error": {') >-[ >- { >- "type": "other", >- "value": "{" >- }, >- { >- "type": "string", >- "value": "\"error\"" >- }, >- { >- "type": "other", >- "value": ":" >- }, >- { >- "type": "whitespace", >- "value": " " >- }, >- { >- "type": "other", >- "value": "{" >- } >-]" >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html >deleted file mode 100644 >index 69606c977eda42e851792ac3a37d1a42481cf821..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html >+++ /dev/null >@@ -1,157 +0,0 @@ >-<!DOCTYPE html> >-<html class="a"> >-<head> >-<title>GainNode IDL Test</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="/resources/idlharness.js"></script> >-<script src="/resources/WebIDLParser.js"></script> >-<script src="/webaudio/js/helpers.js"></script> >-<style type="text/css"> >- #event-target-idl, >- #base-audio-context-idl, >- #audio-node-idl, >- #audio-param-idl >- { visibility:hidden; height: 0px;} >- </style> >-</head> >-<body class="a"> >- >- <pre id="event-target-idl">interface EventTarget { >- void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false); >- void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false); >- boolean dispatchEvent(Event event); >-}; >- >-/* >-callback interface EventListener { >- void handleEvent(Event event); >-}; >-*/ >-// Callback interfaces are not supported yet, but that's ok >-interface EventListener {}; >-</pre> >- >- <pre id="base-audio-context-idl">callback DecodeErrorCallback = void (DOMException error); >-callback DecodeSuccessCallback = void (AudioBuffer decodedData); >- >-interface BaseAudioContext : EventTarget { >- readonly attribute AudioDestinationNode destination; >- readonly attribute float sampleRate; >- readonly attribute double currentTime; >- readonly attribute AudioListener listener; >- readonly attribute AudioContextState state; >- readonly attribute double baseLatency; >- Promise<void> resume (); >- attribute EventHandler onstatechange; >- AudioBuffer createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate); >- Promise<AudioBuffer> decodeAudioData (ArrayBuffer audioData, optional DecodeSuccessCallback successCallback, optional DecodeErrorCallback errorCallback); >- AudioBufferSourceNode createBufferSource (); >- ConstantSourceNode createConstantSource (); >- ScriptProcessorNode createScriptProcessor (optional unsigned long bufferSize = 0 >- , optional unsigned long numberOfInputChannels = 2 >- , optional unsigned long numberOfOutputChannels = 2 >- ); >- AnalyserNode createAnalyser (); >- GainNode createGain (); >- DelayNode createDelay (optional double maxDelayTime); >- BiquadFilterNode createBiquadFilter (); >- IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback); >- WaveShaperNode createWaveShaper (); >- PannerNode createPanner (); >- StereoPannerNode createStereoPanner (); >- ConvolverNode createConvolver (); >- ChannelSplitterNode createChannelSplitter (optional unsigned long numberOfOutputs = 6 >- ); >- ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6 >- ); >- DynamicsCompressorNode createDynamicsCompressor (); >- OscillatorNode createOscillator (); >- PeriodicWave createPeriodicWave (Float32Array real, Float32Array imag, optional PeriodicWaveConstraints constraints); >-};</pre> >- >- <pre id="audio-node-idl">enum ChannelCountMode { >- "max", >- "clamped-max", >- "explicit" >-}; >- >-enum ChannelInterpretation { >- "speakers", >- "discrete" >-}; >- >-interface AudioNode : EventTarget { >- >- void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0); >- void connect(AudioParam destination, optional unsigned long output = 0); >- void disconnect(optional unsigned long output = 0); >- >- readonly attribute BaseAudioContext context; >- readonly attribute unsigned long numberOfInputs; >- readonly attribute unsigned long numberOfOutputs; >- >- // Channel up-mixing and down-mixing rules for all inputs. >- attribute unsigned long channelCount; >- attribute ChannelCountMode channelCountMode; >- attribute ChannelInterpretation channelInterpretation; >- >-};</pre> >- >- <pre id="audio-param-idl">interface AudioParam { >- >- attribute float value; >- readonly attribute float defaultValue; >- readonly attribute float minValue; >- readonly attribute float maxValue; >- >- // Parameter automation. >- void setValueAtTime(float value, double startTime); >- void linearRampToValueAtTime(float value, double endTime); >- void exponentialRampToValueAtTime(float value, double endTime); >- >- // Exponentially approach the target value with a rate having the given time constant. >- void setTargetAtTime(float target, double startTime, double timeConstant); >- >- // Sets an array of arbitrary parameter values starting at time for the given duration. >- // The number of values will be scaled to fit into the desired duration. >- void setValueCurveAtTime(Float32Array values, double startTime, double duration); >- >- // Cancels all scheduled parameter changes with times greater than or equal to startTime. >- void cancelScheduledValues(double startTime); >- >-};</pre> >- >-<pre id="gain-node-idl">dictionary GainOptions : AudioNodeOptions { >- float gain = 1.0; >-}; >- >-[Constructor(BaseAudioContext context, optional GainOptions options)] >-interface GainNode : AudioNode { >- >- readonly attribute AudioParam gain; >- >-};</pre> >- >- <div id="log"></div> >- >- <script> >-promise_test(async function () { >- const webAudioApi = await fetch('/interfaces/web-audio-api.idl').then(r => r.text()); >- >- var idl_array = new IdlArray(); >- idl_array.add_untested_idls(webAudioApi, { only: ['AudioNodeOptions'] }); >- idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("audio-node-idl").textContent); >- idl_array.add_untested_idls(document.getElementById("audio-param-idl").textContent); >- idl_array.add_idls(document.getElementById("gain-node-idl").textContent); >- >- gain_node = (new AudioContext).createGain(); >- >- idl_array.add_objects({GainNode: ["gain_node"]}); >- idl_array.test(); >-}, 'webaudio Gain interfaces'); >- </script> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/w3c-import.log >index 66aa4d6a5b431bb25e83789cab30735666ee3c39..af79e8f70c33b582fe66a1e2b5c1dc4f00f70b89 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/w3c-import.log >@@ -14,9 +14,9 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/ctor-gain.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/gain-basic.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/gain-expected.wav > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/gain.html >-/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-gainnode-interface/test-gainnode.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f70fdfd66543bfbe151e62cb42217fdb68393b95 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter-expected.txt >@@ -0,0 +1,16 @@ >+CONSOLE MESSAGE: line 225: TypeError: Right hand side of instanceof is not an object >+ >+Harness Error (FAIL), message = TypeError: Right hand side of instanceof is not an object >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new IIRFilterNode() threw TypeError: "undefined is not a constructor (evaluating 'new window[name]()')". >+PASS new IIRFilterNode(1) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](1)')". >+PASS new IIRFilterNode(context, 42) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new IIRFilterNode(context, {"feedforward":[1],"feedback":[1,-0.9]}) incorrectly threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html >new file mode 100644 >index 0000000000000000000000000000000000000000..bb89512ca62309cbefffcb070afc6e9a98fc5d2e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html >@@ -0,0 +1,126 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: IIRFilter >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'IIRFilterNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'IIRFilterNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers', >+ constructorOptions: {feedforward: [1], feedback: [1, -.9]} >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions( >+ should, context, 'IIRFilterNode', >+ {additionalOptions: {feedforward: [1, 1], feedback: [1, .5]}}); >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ >+ let options = {feedback: [1, .5]}; >+ should( >+ () => { >+ node = new IIRFilterNode(context, options); >+ }, >+ 'node = new IIRFilterNode(, ' + JSON.stringify(options) + ')') >+ .throw('TypeError'); >+ >+ options = {feedforward: [1, 0.5]}; >+ should( >+ () => { >+ node = new IIRFilterNode(context, options); >+ }, >+ 'node = new IIRFilterNode(c, ' + JSON.stringify(options) + ')') >+ .throw('TypeError'); >+ >+ task.done(); >+ }); >+ >+ // Test functionality of constructor. This is needed because we have no >+ // way of determining if the filter coefficients were were actually set >+ // appropriately. >+ >+ // TODO(rtoy): This functionality test should be moved out to a separate >+ // file. >+ audit.define('functionality', (task, should) => { >+ let options = {feedback: [1, .5], feedforward: [1, 1]}; >+ >+ // Create two-channel offline context; sample rate and length are fairly >+ // arbitrary. Channel 0 contains the test output and channel 1 contains >+ // the expected output. >+ let sampleRate = 48000; >+ let renderLength = 0.125; >+ let testContext = >+ new OfflineAudioContext(2, renderLength * sampleRate, sampleRate); >+ >+ // The test node uses the constructor. The reference node creates the >+ // same filter but uses the old factory method. >+ let testNode = new IIRFilterNode(testContext, options); >+ let refNode = testContext.createIIRFilter( >+ Float32Array.from(options.feedforward), >+ Float32Array.from(options.feedback)); >+ >+ let source = testContext.createOscillator(); >+ source.connect(testNode); >+ source.connect(refNode); >+ >+ let merger = testContext.createChannelMerger( >+ testContext.destination.channelCount); >+ >+ testNode.connect(merger, 0, 0); >+ refNode.connect(merger, 0, 1); >+ >+ merger.connect(testContext.destination); >+ >+ source.start(); >+ testContext.startRendering() >+ .then(function(resultBuffer) { >+ let actual = resultBuffer.getChannelData(0); >+ let expected = resultBuffer.getChannelData(1); >+ >+ // The output from the two channels should be exactly equal >+ // because exactly the same IIR filter should have been created. >+ should(actual, 'Output of filter using new IIRFilter(...)') >+ .beEqualToArray(expected); >+ }) >+ .then(() => task.done()); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/w3c-import.log >index 83d9303f81f7ffcbd5e3a265223187a097cde09c..3bf707d96b84320618412671625ef0c10e5d5835 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/ctor-iirfilter.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt >index 05820f4721c43c8a69de29e2573ea3192eb28c8c..dffdc2e8c0fdf734209ca6eec7125c926133cf87 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt >@@ -1,5 +1,5 @@ > > PASS Element Source tests completed > PASS Channel 0 processed some data >-FAIL All data processed correctly assert_array_approx_equals: comparing expected and rendered buffers (channel 0) lengths differ, expected 44098 got 40003 >+FAIL All data processed correctly assert_array_approx_equals: comparing expected and rendered buffers (channel 0) lengths differ, expected 48000 got 43574 > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..201363a86c56ec804dafe666fbc778f619a3fb74 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext-expected.txt >@@ -0,0 +1,10 @@ >+CONSOLE MESSAGE: line 39: TypeError: undefined is not an object (evaluating 'context.length') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'context.length') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [basic] Old-style constructor >+PASS new OfflineAudioContext(3) threw TypeError: "Not enough arguments". >+PASS new OfflineAudioContext(3, 42) threw TypeError: "Not enough arguments". >+FAIL X context = new OfflineAudioContext(3, 42, 12345) incorrectly threw SyntaxError: "The string did not match the expected pattern.". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html >new file mode 100644 >index 0000000000000000000000000000000000000000..79aafe7f1f060103a1dcba430e6572b47796f225 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html >@@ -0,0 +1,203 @@ >+<!doctype html> >+<html> >+ <head> >+ <title>Test Constructor: OfflineAudioContext</title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ >+ <body> >+ <script> >+ let audit = Audit.createTaskRunner(); >+ >+ // Just a simple test of the 3-arg constructor; This should be >+ // well-covered by other layout tests that use the 3-arg constructor. >+ audit.define( >+ {label: 'basic', description: 'Old-style constructor'}, >+ (task, should) => { >+ let context; >+ >+ // First and only arg should be a dictionary. >+ should(() => { >+ new OfflineAudioContext(3); >+ }, 'new OfflineAudioContext(3)').throw('TypeError'); >+ >+ // Constructor needs 1 or 3 args, so 2 should throw. >+ should(() => { >+ new OfflineAudioContext(3, 42); >+ }, 'new OfflineAudioContext(3, 42)').throw('TypeError'); >+ >+ // Valid constructor >+ should(() => { >+ context = new OfflineAudioContext(3, 42, 12345); >+ }, 'context = new OfflineAudioContext(3, 42, 12345)').notThrow(); >+ >+ // Verify that the context was constructed correctly. >+ should(context.length, 'context.length').beEqualTo(42); >+ should(context.sampleRate, 'context.sampleRate').beEqualTo(12345); >+ should( >+ context.destination.channelCount, >+ 'context.destination.channelCount') >+ .beEqualTo(3); >+ should( >+ context.destination.channelCountMode, >+ 'context.destination.channelCountMode') >+ .beEqualTo('explicit'); >+ should( >+ context.destination.channelInterpretation, >+ 'context.destination.channelInterpretation') >+ .beEqualTo('speakers'); >+ task.done(); >+ }); >+ >+ // Test constructor throws an error if the required members of the >+ // dictionary are not given. >+ audit.define( >+ {label: 'options-1', description: 'Required options'}, >+ (task, should) => { >+ let context2; >+ >+ // No args should throw >+ should(() => { >+ new OfflineAudioContext(); >+ }, 'new OfflineAudioContext()').throw('TypeError'); >+ >+ // Empty OfflineAudioContextOptions should throw >+ should(() => { >+ new OfflineAudioContext({}); >+ }, 'new OfflineAudioContext({})').throw('TypeError'); >+ >+ let options = {length: 42}; >+ // sampleRate is required. >+ should( >+ () => { >+ new OfflineAudioContext(options); >+ }, >+ 'new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .throw('TypeError'); >+ >+ options = {sampleRate: 12345}; >+ // length is required. >+ should( >+ () => { >+ new OfflineAudioContext(options); >+ }, >+ 'new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .throw('TypeError'); >+ >+ // Valid constructor. Verify that the resulting context has the >+ // correct values. >+ options = {length: 42, sampleRate: 12345}; >+ should( >+ () => { >+ context2 = new OfflineAudioContext(options); >+ }, >+ 'c2 = new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should( >+ context2.destination.channelCount, >+ 'c2.destination.channelCount') >+ .beEqualTo(1); >+ should(context2.length, 'c2.length').beEqualTo(options.length); >+ should(context2.sampleRate, 'c2.sampleRate') >+ .beEqualTo(options.sampleRate); >+ should( >+ context2.destination.channelCountMode, >+ 'c2.destination.channelCountMode') >+ .beEqualTo('explicit'); >+ should( >+ context2.destination.channelInterpretation, >+ 'c2.destination.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ task.done(); >+ }); >+ >+ // Constructor should throw errors for invalid values specified by >+ // OfflineAudioContextOptions. >+ audit.define( >+ {label: 'options-2', description: 'Invalid options'}, >+ (task, should) => { >+ let options = {length: 42, sampleRate: 8000, numberOfChannels: 33}; >+ >+ // channelCount too large. >+ should( >+ () => { >+ new OfflineAudioContext(options); >+ }, >+ 'new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ // length cannot be 0 >+ options = {length: 0, sampleRate: 8000}; >+ should( >+ () => { >+ new OfflineAudioContext(options); >+ }, >+ 'new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ // sampleRate outside valid range >+ options = {length: 1, sampleRate: 1}; >+ should( >+ () => { >+ new OfflineAudioContext(options); >+ }, >+ 'new OfflineAudioContext(' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ task.done(); >+ }); >+ >+ audit.define( >+ {label: 'options-3', description: 'Valid options'}, >+ (task, should) => { >+ let context; >+ let options = { >+ length: 1, >+ sampleRate: 8000, >+ }; >+ >+ // Verify context with valid constructor has the correct values. >+ should( >+ () => { >+ context = new OfflineAudioContext(options); >+ }, >+ 'c = new OfflineAudioContext' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(context.length, 'c.length').beEqualTo(options.length); >+ should(context.sampleRate, 'c.sampleRate') >+ .beEqualTo(options.sampleRate); >+ should( >+ context.destination.channelCount, 'c.destination.channelCount') >+ .beEqualTo(1); >+ should( >+ context.destination.channelCountMode, >+ 'c.destination.channelCountMode') >+ .beEqualTo('explicit'); >+ should( >+ context.destination.channelInterpretation, >+ 'c.destination.channelCountMode') >+ .beEqualTo('speakers'); >+ >+ options.numberOfChannels = 7; >+ should( >+ () => { >+ context = new OfflineAudioContext(options); >+ }, >+ 'c = new OfflineAudioContext' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should( >+ context.destination.channelCount, 'c.destination.channelCount') >+ .beEqualTo(options.numberOfChannels); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/w3c-import.log >index 7bf5c610145f88e6bc5dcf632b3f83011b16e4bb..61d917e913e16b5a017b7ecb9e9d245648ecc127 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/w3c-import.log >@@ -14,4 +14,5 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..7d4b76134036bb9db7a57ad06146ef90d989efe5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new OscillatorNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new OscillatorNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new OscillatorNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new OscillatorNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof OscillatorNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html >new file mode 100644 >index 0000000000000000000000000000000000000000..aaf77aec555b720b343a9e63adae924c730510dc >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html >@@ -0,0 +1,106 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: Oscillator >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'OscillatorNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'OscillatorNode', context, { >+ prefix: prefix, >+ numberOfInputs: 0, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes( >+ should, node, prefix, >+ [{name: 'type', value: 'sine'}, {name: 'frequency', value: 440}]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'OscillatorNode'); >+ task.done(); >+ }); >+ >+ audit.define('constructor options', (task, should) => { >+ let node; >+ let options = {type: 'sawtooth', detune: 7, frequency: 918}; >+ >+ should( >+ () => { >+ node = new OscillatorNode(context, options); >+ }, >+ 'node1 = new OscillatorNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ >+ should(node.type, 'node1.type').beEqualTo(options.type); >+ should(node.detune.value, 'node1.detune.value') >+ .beEqualTo(options.detune); >+ should(node.frequency.value, 'node1.frequency.value') >+ .beEqualTo(options.frequency); >+ >+ should(node.channelCount, 'node1.channelCount').beEqualTo(2); >+ should(node.channelCountMode, 'node1.channelCountMode') >+ .beEqualTo('max'); >+ should(node.channelInterpretation, 'node1.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ // Test that type and periodicWave options work as described. >+ options = { >+ type: 'sine', >+ periodicWave: new PeriodicWave(context, {real: [1, 1]}) >+ }; >+ should(() => { >+ node = new OscillatorNode(context, options); >+ }, 'new OscillatorNode(c, ' + JSON.stringify(options) + ')').notThrow(); >+ >+ options = {type: 'custom'}; >+ should( >+ () => { >+ node = new OscillatorNode(context, options); >+ }, >+ 'new OscillatorNode(c, ' + JSON.stringify(options) + ')') >+ .throw('InvalidStateError'); >+ >+ options = { >+ type: 'custom', >+ periodicWave: new PeriodicWave(context, {real: [1, 1]}) >+ }; >+ should(() => { >+ node = new OscillatorNode(context, options); >+ }, 'new OscillatorNode(, ' + JSON.stringify(options) + ')').notThrow(); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..fefaa9089696a42a6125356a603852c822b631f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/w3c-import.log >@@ -0,0 +1,17 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6c107d0ef3d91a9a77ed10a2e11194587e7c4aad >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner-expected.txt >@@ -0,0 +1,16 @@ >+CONSOLE MESSAGE: line 225: TypeError: Right hand side of instanceof is not an object >+ >+Harness Error (FAIL), message = TypeError: Right hand side of instanceof is not an object >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new PannerNode() threw TypeError: "undefined is not a constructor (evaluating 'new window[name]()')". >+PASS new PannerNode(1) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](1)')". >+PASS new PannerNode(context, 42) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new PannerNode(context) incorrectly threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html >new file mode 100644 >index 0000000000000000000000000000000000000000..48b368ddf2d1e48e40b7341793ec9811d72e1253 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html >@@ -0,0 +1,274 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: Panner >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'PannerNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'PannerNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'panningModel', value: 'equalpower'}, >+ {name: 'positionX', value: 0}, {name: 'positionY', value: 0}, >+ {name: 'positionZ', value: 0}, {name: 'orientationX', value: 1}, >+ {name: 'orientationY', value: 0}, {name: 'orientationZ', value: 0}, >+ {name: 'distanceModel', value: 'inverse'}, >+ {name: 'refDistance', value: 1}, {name: 'maxDistance', value: 10000}, >+ {name: 'rolloffFactor', value: 1}, >+ {name: 'coneInnerAngle', value: 360}, >+ {name: 'coneOuterAngle', value: 360}, >+ {name: 'coneOuterGain', value: 0} >+ ]); >+ >+ // Test the listener too, while we're at it. >+ let listenerAttributes = [ >+ {name: 'positionX', value: 0}, >+ {name: 'positionY', value: 0}, >+ {name: 'positionZ', value: 0}, >+ {name: 'forwardX', value: 0}, >+ {name: 'forwardY', value: 0}, >+ {name: 'forwardZ', value: -1}, >+ {name: 'upX', value: 0}, >+ {name: 'upY', value: 1}, >+ {name: 'upZ', value: 0}, >+ ]; >+ >+ listenerAttributes.forEach((item) => { >+ should( >+ context.listener[item.name].value, >+ 'context.listener.' + item.name + '.value') >+ .beEqualTo(item.value); >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ // Can't use testAudioNodeOptions because the constraints for this node >+ // are not supported there. >+ let node; >+ let success = true; >+ >+ // Test that we can set the channel count to 1 or 2. >+ let options = {channelCount: 1}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node1 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelCount, 'node1.channelCount') >+ .beEqualTo(options.channelCount); >+ >+ options = {channelCount: 2}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node2 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelCount, 'node2.channelCount') >+ .beEqualTo(options.channelCount); >+ >+ // Test that other channel counts throw an error >+ options = {channelCount: 0}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {channelCount: 3}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {channelCount: 99}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ // Test channelCountMode. A mode of "max" is illegal, but others are >+ // ok. >+ options = {channelCountMode: 'clamped-max'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node3 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelCountMode, 'node3.channelCountMode') >+ .beEqualTo(options.channelCountMode); >+ >+ options = {channelCountMode: 'explicit'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node4 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelCountMode, 'node4.channelCountMode') >+ .beEqualTo(options.channelCountMode); >+ >+ options = {channelCountMode: 'max'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('NotSupportedError'); >+ >+ options = {channelCountMode: 'foobar'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, " + JSON.stringify(options) + ")') >+ .throw('TypeError'); >+ >+ // Test channelInterpretation. >+ options = {channelInterpretation: 'speakers'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node5 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelInterpretation, 'node5.channelInterpretation') >+ .beEqualTo(options.channelInterpretation); >+ >+ options = {channelInterpretation: 'discrete'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node6 = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node.channelInterpretation, 'node6.channelInterpretation') >+ .beEqualTo(options.channelInterpretation); >+ >+ options = {channelInterpretation: 'foobar'}; >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .throw('TypeError'); >+ >+ task.done(); >+ }); >+ >+ audit.define('constructor with options', (task, should) => { >+ let node; >+ let success = true; >+ let options = { >+ panningModel: 'HRTF', >+ // We use full double float values here to verify also that the actual >+ // AudioParam value is properly rounded to a float. The actual value >+ // is immaterial as long as x != Math.fround(x). >+ positionX: Math.SQRT2, >+ positionY: 2 * Math.SQRT2, >+ positionZ: 3 * Math.SQRT2, >+ orientationX: -Math.SQRT2, >+ orientationY: -2 * Math.SQRT2, >+ orientationZ: -3 * Math.SQRT2, >+ distanceModel: 'linear', >+ // We use full double float values here to verify also that the actual >+ // attribute is a double float. The actual value is immaterial as >+ // long as x != Math.fround(x). >+ refDistance: Math.PI, >+ maxDistance: 2 * Math.PI, >+ rolloffFactor: 3 * Math.PI, >+ coneInnerAngle: 4 * Math.PI, >+ coneOuterAngle: 5 * Math.PI, >+ coneOuterGain: 6 * Math.PI >+ }; >+ >+ should( >+ () => { >+ node = new PannerNode(context, options); >+ }, >+ 'node = new PannerNode(c, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should(node instanceof PannerNode, 'node instanceof PannerNode') >+ .beEqualTo(true); >+ >+ should(node.panningModel, 'node.panningModel') >+ .beEqualTo(options.panningModel); >+ should(node.positionX.value, 'node.positionX.value') >+ .beEqualTo(Math.fround(options.positionX)); >+ should(node.positionY.value, 'node.positionY.value') >+ .beEqualTo(Math.fround(options.positionY)); >+ should(node.positionZ.value, 'node.positionZ.value') >+ .beEqualTo(Math.fround(options.positionZ)); >+ should(node.orientationX.value, 'node.orientationX.value') >+ .beEqualTo(Math.fround(options.orientationX)); >+ should(node.orientationY.value, 'node.orientationY.value') >+ .beEqualTo(Math.fround(options.orientationY)); >+ should(node.orientationZ.value, 'node.orientationZ.value') >+ .beEqualTo(Math.fround(options.orientationZ)); >+ should(node.distanceModel, 'node.distanceModel') >+ .beEqualTo(options.distanceModel); >+ should(node.refDistance, 'node.refDistance') >+ .beEqualTo(options.refDistance); >+ should(node.maxDistance, 'node.maxDistance') >+ .beEqualTo(options.maxDistance); >+ should(node.rolloffFactor, 'node.rolloffFactor') >+ .beEqualTo(options.rolloffFactor); >+ should(node.coneInnerAngle, 'node.coneInnerAngle') >+ .beEqualTo(options.coneInnerAngle); >+ should(node.coneOuterAngle, 'node.coneOuterAngle') >+ .beEqualTo(options.coneOuterAngle); >+ should(node.coneOuterGain, 'node.coneOuterGain') >+ .beEqualTo(options.coneOuterGain); >+ >+ should(node.channelCount, 'node.channelCount').beEqualTo(2); >+ should(node.channelCountMode, 'node.channelCountMode') >+ .beEqualTo('clamped-max'); >+ should(node.channelInterpretation, 'node.channelInterpretation') >+ .beEqualTo('speakers'); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/w3c-import.log >index f045d979c28e5295063dd6e804e6e62d687a2d53..bd36b3cdea3ecb1c2e22ade5370ceb404af9146a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/distance-inverse.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/distance-linear.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9863f826d957e5b299d37e47f9fd8889fc7064c0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner-expected.txt >@@ -0,0 +1,16 @@ >+CONSOLE MESSAGE: line 225: TypeError: Right hand side of instanceof is not an object >+ >+Harness Error (FAIL), message = TypeError: Right hand side of instanceof is not an object >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [invalid constructor] >+PASS new StereoPannerNode() threw TypeError: "undefined is not a constructor (evaluating 'new window[name]()')". >+PASS new StereoPannerNode(1) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](1)')". >+PASS new StereoPannerNode(context, 42) threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [invalid constructor] All assertions passed. (total 3 assertions) >+PASS > [default constructor] >+FAIL X node0 = new StereoPannerNode(context) incorrectly threw TypeError: "undefined is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html >new file mode 100644 >index 0000000000000000000000000000000000000000..9de58cf783a8f18069830a5990691da574a1cf1f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html >@@ -0,0 +1,125 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: StereoPanner >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('invalid constructor', (task, should) => { >+ testInvalidConstructor(should, 'StereoPannerNode', context); >+ task.done(); >+ }); >+ >+ audit.define('default constructor', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'StereoPannerNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'clamped-max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [{name: 'pan', value: 0}]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ // Can't use testAudioNodeOptions because the constraints for this node >+ // are not supported there. >+ let node; >+ >+ // An array of tests. >+ [{ >+ // Test that we can set the channel count to 1 or 2 and that other >+ // channel counts throw an error. >+ attribute: 'channelCount', >+ tests: [ >+ {value: 1}, {value: 2}, {value: 0, error: 'NotSupportedError'}, >+ {value: 3, error: 'NotSupportedError'}, >+ {value: 99, error: 'NotSupportedError'} >+ ] >+ }, >+ { >+ // Test channelCountMode. A mode of "max" is illegal, but others are >+ // ok. But also throw an error of unknown values. >+ attribute: 'channelCountMode', >+ tests: [ >+ {value: 'clamped-max'}, {value: 'explicit'}, >+ {value: 'max', error: 'NotSupportedError'}, >+ {value: 'foobar', error: 'TypeError'} >+ ] >+ }, >+ { >+ // Test channelInterpretation can be set for valid values and an >+ // error is thrown for others. >+ attribute: 'channelInterpretation', >+ tests: [ >+ {value: 'speakers'}, {value: 'discrete'}, >+ {value: 'foobar', error: 'TypeError'} >+ ] >+ }].forEach(entry => { >+ entry.tests.forEach(testItem => { >+ let options = {}; >+ options[entry.attribute] = testItem.value; >+ let method = testItem.error ? 'throw' : 'notThrow'; >+ >+ should( >+ () => { >+ node = new StereoPannerNode(context, options); >+ }, >+ `new StereoPannerNode(c, ${JSON.stringify(options)})`)[method]( >+ testItem.error); >+ if (!testItem.error) >+ should(node[entry.attribute], `node.${entry.attribute}`) >+ .beEqualTo(options[entry.attribute]); >+ }); >+ }); >+ >+ task.done(); >+ }); >+ >+ audit.define('constructor with options', (task, should) => { >+ let node; >+ let options = { >+ pan: 0.75, >+ }; >+ >+ should( >+ () => { >+ node = new StereoPannerNode(context, options); >+ }, >+ 'node1 = new StereoPannerNode(, ' + JSON.stringify(options) + ')') >+ .notThrow(); >+ should( >+ node instanceof StereoPannerNode, >+ 'node1 instanceof StereoPannerNode') >+ .beEqualTo(true); >+ >+ should(node.pan.value, 'node1.pan.value').beEqualTo(options.pan); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/w3c-import.log >index 32e882b3296bdc86eee3d7822b6143bccc468854..a5ca02dce83e312824dee31a24541162b78a5b7d 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/stereopannernode-basic.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/stereopannernode-panning.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..a06402fdfeff1c32fb9507d7f36f96eaed339126 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: line 227: TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+Harness Error (FAIL), message = TypeError: undefined is not an object (evaluating 'node.numberOfInputs') >+ >+PASS # AUDIT TASK RUNNER STARTED. >+PASS > [initialize] >+PASS context = new OfflineAudioContext(...) did not throw an exception. >+PASS < [initialize] All assertions passed. (total 1 assertions) >+PASS > [incorrect construction] >+PASS new WaveShaperNode() threw TypeError: "function is not a constructor (evaluating 'new window[name]()')". >+PASS new WaveShaperNode(1) threw TypeError: "function is not a constructor (evaluating 'new window[name](1)')". >+PASS new WaveShaperNode(context, 42) threw TypeError: "function is not a constructor (evaluating 'new window[name](context, 42)')". >+PASS < [incorrect construction] All assertions passed. (total 3 assertions) >+PASS > [valid default construction] >+FAIL X node0 = new WaveShaperNode(context) incorrectly threw TypeError: "function is not a constructor (evaluating 'new window[name](context, options.constructorOptions)')". assert_true: expected true got false >+FAIL X node0 instanceof WaveShaperNode is not equal to true. Got false. assert_true: expected true got false >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7aa33ca5aa3323754755ebfda200976b0b292730 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html >@@ -0,0 +1,72 @@ >+<!DOCTYPE html> >+<html> >+ <head> >+ <title> >+ Test Constructor: WaveShaper >+ </title> >+ <script src="/resources/testharness.js"></script> >+ <script src="/resources/testharnessreport.js"></script> >+ <script src="/webaudio/resources/audit-util.js"></script> >+ <script src="/webaudio/resources/audit.js"></script> >+ <script src="/webaudio/resources/audionodeoptions.js"></script> >+ </head> >+ <body> >+ <script id="layout-test-code"> >+ let context; >+ >+ let audit = Audit.createTaskRunner(); >+ >+ audit.define('initialize', (task, should) => { >+ context = initializeContext(should); >+ task.done(); >+ }); >+ >+ audit.define('incorrect construction', (task, should) => { >+ testInvalidConstructor(should, 'WaveShaperNode', context); >+ task.done(); >+ }); >+ >+ audit.define('valid default construction', (task, should) => { >+ let prefix = 'node0'; >+ let node = testDefaultConstructor(should, 'WaveShaperNode', context, { >+ prefix: prefix, >+ numberOfInputs: 1, >+ numberOfOutputs: 1, >+ channelCount: 2, >+ channelCountMode: 'max', >+ channelInterpretation: 'speakers' >+ }); >+ >+ testDefaultAttributes(should, node, prefix, [ >+ {name: 'curve', value: null}, {name: 'oversample', value: 'none'} >+ ]); >+ >+ task.done(); >+ }); >+ >+ audit.define('test AudioNodeOptions', (task, should) => { >+ testAudioNodeOptions(should, context, 'WaveShaperNode'); >+ task.done(); >+ }); >+ >+ audit.define('valid non-default', (task, should) => { >+ // Construct an WaveShaperNode with options >+ let options = {curve: Float32Array.from([1, 2, 3]), oversample: '4x'}; >+ let node; >+ >+ let message = >+ 'node1 = new WaveShaperNode(, ' + JSON.stringify(options) + ')'; >+ should(() => { >+ node = new WaveShaperNode(context, options); >+ }, message).notThrow(); >+ should(node.curve, 'node1.curve').beEqualToArray(options.curve); >+ should(node.oversample, 'node1.oversample') >+ .beEqualTo(options.oversample); >+ >+ task.done(); >+ }); >+ >+ audit.run(); >+ </script> >+ </body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/w3c-import.log >index fb2c15e0cbe6b0ef105918fad1108e05c17a1453..b53162bb543bb48cd1a5c259a8ad843631404568 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/w3c-import.log >@@ -14,6 +14,7 @@ Property values requiring vendor prefixes: > None > ------------------------------------------------------------------------ > List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/ctor-waveshaper.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/curve-tests.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-copy-curve.html > /LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-waveshapernode-interface/waveshaper-limits.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html >index 383977c52e17f3e84958d62b9c9c20a558c7e009..7a45e5daba7eb441fe136d7a114a2a6a07c926af 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-insertDTMF.https.html >@@ -148,7 +148,7 @@ > > 7. Set the object's toneBuffer attribute to tones. > */ >- promise_test(() => { >+ promise_test(t => { > return createDtmfSender() > .then(dtmfSender => { > dtmfSender.insertDTMF('123'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https-expected.txt >index e9ce286c59cc225157d53204cc224b59bcc99937..773a5cc4749b6773a7f7c6190500cebd2668d813 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https-expected.txt >@@ -10,4 +10,6 @@ FAIL Calling insertDTMF() in the middle of tonechange events should cause future > FAIL Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones assert_unreached: Unexpected promise rejection: ReferenceError: Can't find variable: RTCDTMFSender Reached unreachable code > FAIL Calling insertDTMF('') in the middle of tonechange events should stop future tonechange events from firing assert_unreached: Unexpected promise rejection: ReferenceError: Can't find variable: RTCDTMFSender Reached unreachable code > FAIL Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing undefined is not an object (evaluating 'dtmfSender.addEventListener') >+FAIL Tone change event constructor works Can't find variable: RTCDTMFToneChangeEvent >+FAIL Tone change event with unexpected name should not crash Can't find variable: RTCDTMFToneChangeEvent > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https.html >index 9fa900c7368d3997152bae1127e180fdd7b1ed6d..bfb8b8c00674affac6168cbc9439afecad448802 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDTMFSender-ontonechange.https.html >@@ -282,4 +282,15 @@ > > }, `Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing`); > >+ /* Section 7.3 - Tone change event */ >+ test(t => { >+ let ev = new RTCDTMFToneChangeEvent('tonechange', {'tone': '1'}); >+ assert_equals(ev.type, 'tonechange'); >+ assert_equals(ev.tone, '1'); >+ }, 'Tone change event constructor works'); >+ >+ test(t => { >+ let ev = new RTCDTMFToneChangeEvent('worngname', {}); >+ }, 'Tone change event with unexpected name should not crash'); >+ > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport.html >index 57ecf07f7b128fdff676c25fbf0206e015bde063..9163285ac5b765fcebc48c562fe6edd6b7c3f143 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport.html >@@ -118,7 +118,7 @@ > validateCandidateParameter(iceTransport.getRemoteParameters()); > } > >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >@@ -163,7 +163,7 @@ > }); > }, 'Two connected iceTransports should has matching local/remote candidates returned'); > >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > pc1.createDataChannel(''); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..6a51632d96291babb6a8fdc3dfcf054a55eaf7d5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS RTCPeerConnection addTrack does not deadlock. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0bf58d947ca716c030f274eba9d33771ea411b69 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html >@@ -0,0 +1,30 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection addTrack does not deadlock</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ 'use strict'; >+ >+ // This test sets up two peer connections using a sequence of operations >+ // that triggered a deadlock in Chrome. See https://crbug.com/736725. >+ // If a deadlock is introduced again, this test times out. >+ promise_test(async t => { >+ const pc1 = new RTCPeerConnection(); >+ t.add_cleanup(() => pc1.close()); >+ const stream = await navigator.mediaDevices.getUserMedia( >+ {audio: false, video: true}); >+ const videoTrack = stream.getVideoTracks()[0]; >+ t.add_cleanup(() => videoTrack.stop()); >+ pc1.addTrack(videoTrack, stream); >+ const offer = await pc1.createOffer(); >+ await pc1.setLocalDescription(offer); >+ const pc2 = new RTCPeerConnection(); >+ t.add_cleanup(() => pc2.close()); >+ const srdPromise = pc2.setRemoteDescription(offer); >+ pc2.addTrack(videoTrack, stream); >+ // The deadlock encountered in https://crbug.com/736725 occured here. >+ await srdPromise; >+ await pc2.createAnswer(); >+ }, 'RTCPeerConnection addTrack does not deadlock.'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html >index 63dac8f377986ff0cdba73bd7b413b94a31bfd27..38c8b632cd12fe24b3dd1109fdd295268dc256ee 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html >@@ -35,7 +35,7 @@ > assert_equals(pc.canTrickleIceCandidates, null, 'canTrickleIceCandidates property is null'); > }, 'canTrickleIceCandidates property is null prior to setRemoteDescription'); > >- promise_test(function() { >+ promise_test(function(t) { > var pc = new RTCPeerConnection(); > > return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp})) >@@ -44,7 +44,7 @@ > }) > }, 'canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle'); > >- promise_test(function() { >+ promise_test(function(t) { > var pc = new RTCPeerConnection(); > > return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp.replace('a=ice-options:trickle\r\n', '')})) >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..862f4681dc85533ec64a1aefd5cb02ff380a8818 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive-expected.txt >@@ -0,0 +1,17 @@ >+ >+PASS createOffer() with offerToReceiveAudio set to false should not create a transceiver >+FAIL createOffer() with offerToReceiveAudio should create a "recvonly" transceiver assert_equals: Expect pc to have one transceiver expected 1 but got 0 >+FAIL offerToReceiveAudio option should be ignored if a non-stopped "recvonly" transceiver exists assert_equals: Expect pc to have one transceiver expected 1 but got 0 >+PASS offerToReceiveAudio option should be ignored if a non-stopped "sendrecv" transceiver exists >+FAIL offerToReceiveAudio set to false with a track should create a "sendonly" transceiver assert_equals: Expect transceiver to have "sendonly" direction expected "sendonly" but got "sendrecv" >+FAIL offerToReceiveAudio set to false with a "recvonly" transceiver should change the direction to "inactive" assert_equals: Expect transceiver to have "inactive" direction expected "inactive" but got "recvonly" >+FAIL subsequent offerToReceiveAudio set to false with a track should change the direction to "sendonly" assert_equals: Expect transceiver to have "sendonly" direction expected "sendonly" but got "sendrecv" >+PASS createOffer() with offerToReceiveVideo set to false should not create a transceiver >+FAIL createOffer() with offerToReceiveVideo should create a "recvonly" transceiver assert_equals: Expect pc to have one transceiver expected 1 but got 0 >+FAIL offerToReceiveVideo option should be ignored if a non-stopped "recvonly" transceiver exists assert_equals: Expect pc to have one transceiver expected 1 but got 0 >+PASS offerToReceiveVideo option should be ignored if a non-stopped "sendrecv" transceiver exists >+FAIL offerToReceiveVideo set to false with a track should create a "sendonly" transceiver assert_equals: Expect transceiver to have "sendonly" direction expected "sendonly" but got "sendrecv" >+FAIL offerToReceiveVideo set to false with a "recvonly" transceiver should change the direction to "inactive" assert_equals: Expect transceiver to have "inactive" direction expected "inactive" but got "recvonly" >+FAIL subsequent offerToReceiveVideo set to false with a track should change the direction to "sendonly" assert_equals: Expect transceiver to have "sendonly" direction expected "sendonly" but got "sendrecv" >+FAIL offerToReceiveAudio and Video should create two "recvonly" transceivers assert_equals: Expect pc to have two transceivers expected 2 but got 0 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c599b1c0d07a5d5c664120008ca48d1564df8ea9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html >@@ -0,0 +1,169 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>Test legacy offerToReceiveAudio/Video options</title> >+<link rel="help" href="https://w3c.github.io/webrtc-pc/#legacy-configuration-extensions"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="RTCPeerConnection-helper.js"></script> >+<script> >+ 'use strict'; >+ >+ // Run some tests for both audio and video kinds >+ ['audio', 'video'].forEach((kind) => { >+ const capsKind = kind[0].toUpperCase() + kind.slice(1); >+ >+ const offerToReceiveTrue = {}; >+ offerToReceiveTrue[`offerToReceive${capsKind}`] = true; >+ >+ const offerToReceiveFalse = {}; >+ offerToReceiveFalse[`offerToReceive${capsKind}`] = false; >+ >+ // Start testing >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const dummy = pc.createDataChannel('foo'); // Just to have something to offer >+ >+ return pc.createOffer(offerToReceiveFalse) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 0, >+ 'Expect pc to have no transceivers'); >+ }); >+ }, `createOffer() with offerToReceive${capsKind} set to false should not create a transceiver`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ return pc.createOffer(offerToReceiveTrue) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'recvonly', >+ 'Expect transceiver to have "recvonly" direction'); >+ }); >+ }, `createOffer() with offerToReceive${capsKind} should create a "recvonly" transceiver`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ return pc.createOffer(offerToReceiveTrue) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'recvonly', >+ 'Expect transceiver to have "recvonly" direction'); >+ }) >+ .then(() => pc.createOffer(offerToReceiveTrue)) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to still have only one transceiver'); >+ }) >+ ; >+ }, `offerToReceive${capsKind} option should be ignored if a non-stopped "recvonly" transceiver exists`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ return getTrackFromUserMedia(kind) >+ .then(([track, stream]) => { >+ pc.addTrack(track, stream); >+ return pc.createOffer(); >+ }) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'sendrecv', >+ 'Expect transceiver to have "sendrecv" direction'); >+ }) >+ .then(() => pc.createOffer(offerToReceiveTrue)) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to still have only one transceiver'); >+ }) >+ ; >+ }, `offerToReceive${capsKind} option should be ignored if a non-stopped "sendrecv" transceiver exists`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ return getTrackFromUserMedia(kind) >+ .then(([track, stream]) => { >+ pc.addTrack(track, stream); >+ return pc.createOffer(offerToReceiveFalse); >+ }) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'sendonly', >+ 'Expect transceiver to have "sendonly" direction'); >+ }) >+ ; >+ }, `offerToReceive${capsKind} set to false with a track should create a "sendonly" transceiver`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ pc.addTransceiver(kind, {direction: 'recvonly'}); >+ >+ return pc.createOffer(offerToReceiveFalse) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'inactive', >+ 'Expect transceiver to have "inactive" direction'); >+ }) >+ ; >+ }, `offerToReceive${capsKind} set to false with a "recvonly" transceiver should change the direction to "inactive"`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const pc2 = new RTCPeerConnection(); >+ >+ return getTrackFromUserMedia(kind) >+ .then(([track, stream]) => { >+ pc.addTrack(track, stream); >+ return pc.createOffer(); >+ }) >+ .then((offer) => pc.setLocalDescription(offer)) >+ .then(() => pc2.setRemoteDescription(pc.localDescription)) >+ .then(() => pc2.createAnswer()) >+ .then((answer) => pc2.setLocalDescription(answer)) >+ .then(() => pc.setRemoteDescription(pc2.localDescription)) >+ .then(() => pc.createOffer(offerToReceiveFalse)) >+ .then((offer) => { >+ assert_equals(pc.getTransceivers().length, 1, >+ 'Expect pc to have one transceiver'); >+ >+ const transceiver = pc.getTransceivers()[0]; >+ assert_equals(transceiver.direction, 'sendonly', >+ 'Expect transceiver to have "sendonly" direction'); >+ }) >+ ; >+ }, `subsequent offerToReceive${capsKind} set to false with a track should change the direction to "sendonly"`); >+ }); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ return pc.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true }) >+ .then(() => { >+ assert_equals(pc.getTransceivers().length, 2, >+ 'Expect pc to have two transceivers'); >+ >+ assert_equals(pc.getTransceivers()[0].direction, 'recvonly', >+ 'Expect first transceiver to have "recvonly" direction'); >+ assert_equals(pc.getTransceivers()[1].direction, 'recvonly', >+ 'Expect second transceiver to have "recvonly" direction'); >+ }); >+ }, 'offerToReceiveAudio and Video should create two "recvonly" transceivers'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.html >deleted file mode 100644 >index 2ecce8363b3869984cd8ac822e494b98205be5f8..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.html >+++ /dev/null >@@ -1,400 +0,0 @@ >-<!doctype html> >-<meta charset=utf-8> >-<title>RTCPeerConnection.prototype.getIdentityAssertion</title> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="identity-helper.js"></script> >-<script> >- 'use strict'; >- >- // Test is based on the following editor draft: >- // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html >- >- // The tests here interacts with the mock identity provider located at >- // /.well-known/idp-proxy/mock-idp.js >- >- // The following helper functions are called from identity-helper.js >- // parseAssertionResult >- // getIdpDomains >- // assert_rtcerror_rejection >- // hostString >- >- /* >- 9.6. RTCPeerConnection Interface Extensions >- partial interface RTCPeerConnection { >- void setIdentityProvider(DOMString provider, >- optional RTCIdentityProviderOptions options); >- Promise<DOMString> getIdentityAssertion(); >- readonly attribute Promise<RTCIdentityAssertion> peerIdentity; >- readonly attribute DOMString? idpLoginUrl; >- readonly attribute DOMString? idpErrorInfo; >- }; >- >- dictionary RTCIdentityProviderOptions { >- DOMString protocol = "default"; >- DOMString usernameHint; >- DOMString peerIdentity; >- }; >- */ >- promise_test(() => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- >- const [idpDomain] = getIdpDomains(); >- const idpHost = hostString(idpDomain, port); >- >- pc.setIdentityProvider(idpHost, { >- protocol: 'mock-idp.js?foo=bar', >- usernameHint: `alice@${idpDomain}`, >- peerIdentity: 'bob@example.org' >- }); >- >- return pc.getIdentityAssertion() >- .then(assertionResultStr => { >- const { idp, assertion } = parseAssertionResult(assertionResultStr); >- >- assert_equals(idp.domain, idpHost, >- 'Expect mock-idp.js to construct domain from its location.host'); >- >- assert_equals(idp.protocol, 'mock-idp.js', >- 'Expect mock-idp.js to return protocol of itself with no query string'); >- >- const { >- watermark, >- args, >- env, >- query, >- } = assertion; >- >- assert_equals(watermark, 'mock-idp.js.watermark', >- 'Expect assertion result to contain watermark left by mock-idp.js'); >- >- assert_equals(args.origin, window.origin, >- 'Expect args.origin argument to be the origin of this window'); >- >- assert_equals(env.location, >- `https://${idpHost}/.well-known/idp-proxy/idp-test.js?foo=bar`, >- 'Expect IdP proxy to be loaded with full well-known URL constructed from provider and protocol'); >- >- assert_equals(env.origin, `https://${idpHost}`, >- 'Expect IdP to have its own origin'); >- >- assert_equals(args.options.protocol, 'idp-test.js?foo=bar', >- 'Expect options.protocol to be the same value as being passed from here'); >- >- assert_equals(args.options.usernameHint, `alice@${idpDomain}`, >- 'Expect options.usernameHint to be the same value as being passed from here'); >- >- assert_equals(args.options.peerIdentity, 'bob@example.org', >- 'Expect options.peerIdentity to be the same value as being passed from here'); >- >- assert_equals(query.foo, 'bar', >- 'Expect query string to be parsed by mock-idp.js and returned back'); >- }); >- }, 'getIdentityAssertion() should load IdP proxy and return assertion generated'); >- >- // When generating assertion, the RTCPeerConnection doesn't care if the returned assertion >- // represents identity of different domain >- promise_test(() => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- >- const [idpDomain1, idpDomain2] = getIdpDomains(); >- assert_not_equals(idpDomain1, idpDomain2, >- 'Sanity check two idpDomains are different'); >- >- // Ask mock-idp.js to return a custom domain idpDomain2 and custom protocol foo >- pc.setIdentityProvider(hostString(idpDomain1, port), { >- protocol: `mock-idp.js?generatorAction=return-custom-idp&domain=${idpDomain2}&protocol=foo`, >- usernameHint: `alice@${idpDomain2}`, >- }); >- >- return pc.getIdentityAssertion() >- .then(assertionResultStr => { >- const { idp, assertion } = parseAssertionResult(assertionResultStr); >- assert_equals(idp.domain, idpDomain2); >- assert_equals(idp.protocol, 'foo'); >- assert_equals(assertion.options.usernameHint, `alice@${idpDomain2}`); >- }); >- }, 'getIdentityAssertion() should succeed if mock-idp.js return different domain and protocol in assertion'); >- >- /* >- 9.3. Requesting Identity Assertions >- 4. If the IdP proxy produces an error or returns a promise that does not resolve to >- a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then identity >- validation fails. >- >- 9.5. IdP Error Handling >- - If an identity provider throws an exception or returns a promise that is ultimately >- rejected, then the procedure that depends on the IdP MUST also fail. These types of >- errors will cause an IdP failure with an RTCError with errorDetail set to >- "idp-execution-failure". >- >- 9.6. RTCPeerConnection Interface Extensions >- idpErrorInfo >- An attribute that the IdP can use to pass additional information back to the >- applications about the error. The format of this string is defined by the IdP and >- may be JSON. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- >- assert_equals(pc.idpErrorInfo, null, >- 'Expect initial pc.idpErrorInfo to be null'); >- >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- // Ask mock-idp.js to throw an error with err.errorInfo set to bar >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: `mock-idp.js?generatorAction=throw-error&errorInfo=bar`, >- usernameHint: `alice@${idpDomain}`, >- }); >- >- return assert_rtcerror_rejection('idp-execution-failure', >- pc.getIdentityAssertion()) >- .then(() => { >- assert_equals(pc.idpErrorInfo, 'bar', >- 'Expect pc.idpErrorInfo to be set to the err.idpErrorInfo thrown by mock-idp.js'); >- }); >- }, `getIdentityAssertion() should reject with RTCError('idp-execution-failure') if mock-idp.js throws error`); >- >- /* >- 9.5. IdP Error Handling >- - If the script loaded from the identity provider is not valid JavaScript or does >- not implement the correct interfaces, it causes an IdP failure with an RTCError >- with errorDetail set to "idp-bad-script-failure". >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- // Ask mock-idp.js to not register its callback to the >- // RTCIdentityProviderRegistrar >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: `mock-idp.js?action=do-not-register`, >- usernameHint: `alice@${idpDomain}`, >- }); >- >- return assert_rtcerror_rejection('idp-bad-script-failure', >- pc.getIdentityAssertion()); >- >- }, `getIdentityAssertion() should reject with RTCError('idp-bad-script-failure') if IdP proxy script do not register its callback`); >- >- /* >- 9.3. Requesting Identity Assertions >- 4. If the IdP proxy produces an error or returns a promise that does not resolve >- to a valid RTCIdentityAssertionResult (see 9.5 IdP Error Handling), then assertion >- generation fails. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- // Ask mock-idp.js to return an invalid result that is not proper >- // RTCIdentityAssertionResult >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: `mock-idp.js?generatorAction=return-invalid-result`, >- usernameHint: `alice@${idpDomain}`, >- }); >- >- return promise_rejects(t, 'OperationError', >- pc.getIdentityAssertion()); >- }, `getIdentityAssertion() should reject with OperationError if mock-idp.js return invalid result`); >- >- /* >- 9.5. IdP Error Handling >- - A RTCPeerConnection might be configured with an identity provider, but loading of >- the IdP URI fails. Any procedure that attempts to invoke such an identity provider >- and cannot load the URI fails with an RTCError with errorDetail set to >- "idp-load-failure" and the httpRequestStatusCode attribute of the error set to the >- HTTP status code of the response. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- >- pc.setIdentityProvider('nonexistent-origin.web-platform.test', { >- protocol: `non-existent`, >- usernameHint: `alice@example.org`, >- }); >- >- return assert_rtcerror_rejection('idp-load-failure', >- pc.getIdentityAssertion()); >- }, `getIdentityAssertion() should reject with RTCError('idp-load-failure') if IdP cannot be loaded`); >- >- /* >- 9.3.1. User Login Procedure >- Rejecting the promise returned by generateAssertion will cause the error to >- propagate to the application. Login errors are indicated by rejecting the >- promise with an RTCError with errorDetail set to "idp-need-login". >- >- The URL to login at will be passed to the application in the idpLoginUrl >- attribute of the RTCPeerConnection. >- >- 9.5. IdP Error Handling >- - If the identity provider requires the user to login, the operation will fail >- RTCError with errorDetail set to "idp-need-login" and the idpLoginUrl attribute >- of the error set to the URL that can be used to login. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- >- assert_equals(pc.idpLoginUrl, null, >- 'Expect initial pc.idpLoginUrl to be null'); >- >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- const idpHost = hostString(idpDomain, port); >- >- pc.setIdentityProvider(idpHost, { >- protocol: `mock-idp.js?generatorAction=require-login`, >- usernameHint: `alice@${idpDomain}`, >- }); >- >- return assert_rtcerror_rejection('idp-need-login', >- pc.getIdentityAssertion()) >- .then(err => { >- assert_equals(err.idpLoginUrl, `https://${idpHost}/login`, >- 'Expect err.idpLoginUrl to be set to url set by mock-idp.js'); >- >- assert_equals(pc.idpLoginUrl, `https://${idpHost}/login`, >- 'Expect pc.idpLoginUrl to be set to url set by mock-idp.js'); >- >- assert_equals(pc.idpErrorInfo, 'login required', >- 'Expect pc.idpErrorInfo to be set to info set by mock-idp.js'); >- }); >- }, `getIdentityAssertion() should reject with RTCError('idp-need-login') when mock-idp.js requires login`); >- >- /* >- RTCIdentityProviderOptions Members >- peerIdentity >- The identity of the peer. For identity providers that bind their assertions to a >- particular pair of communication peers, this allows them to generate an assertion >- that includes both local and remote identities. If this value is omitted, but a >- value is provided for the peerIdentity member of RTCConfiguration, the value from >- RTCConfiguration is used. >- */ >- promise_test(() => { >- const pc = new RTCPeerConnection({ >- peerIdentity: 'bob@example.net' >- }); >- >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- const idpHost = hostString(idpDomain, port); >- >- pc.setIdentityProvider(idpHost, { >- protocol: 'mock-idp.js' >- }); >- >- return pc.getIdentityAssertion() >- .then(assertionResultStr => { >- const { assertion } = parseAssertionResult(assertionResultStr); >- assert_equals(assertion.args.options.peerIdentity, 'bob@example.net'); >- }); >- }, 'setIdentityProvider() with no peerIdentity provided should use peerIdentity value from getConfiguration()'); >- >- /* >- 9.6. setIdentityProvider >- 3. If any identity provider value has changed, discard any stored identity assertion. >- */ >- promise_test(() => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- const idpHost = hostString(idpDomain, port); >- >- pc.setIdentityProvider(idpHost, { >- protocol: 'mock-idp.js?mark=first' >- }); >- >- return pc.getIdentityAssertion() >- .then(assertionResultStr => { >- const { assertion } = parseAssertionResult(assertionResultStr); >- assert_equals(assertion.query.mark, 'first'); >- >- pc.setIdentityProvider(idpHost, { >- protocol: 'mock-idp.js?mark=second' >- }); >- >- return pc.getIdentityAssertion(); >- }) >- .then(assertionResultStr => { >- const { assertion } = parseAssertionResult(assertionResultStr); >- assert_equals(assertion.query.mark, 'second', >- 'Expect generated assertion is from second IdP config'); >- }); >- }, `Calling setIdentityProvider() multiple times should reset identity assertions`); >- >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: 'mock-idp.js', >- usernameHint: `alice@${idpDomain}` >- }); >- >- return pc.getIdentityAssertion() >- .then(assertionResultStr => >- pc.createOffer() >- .then(offer => { >- assert_true(offer.sdp.includes(`\r\na=identity:${assertionResultStr}`, >- 'Expect SDP to have a=identity line containing assertion string')); >- })); >- }, 'createOffer() should return SDP containing identity assertion string if identity provider is set'); >- >- /* >- 4.4.2. Steps to create an offer >- 1. If the need for an identity assertion was identified when createOffer was >- invoked, wait for the identity assertion request process to complete. >- 2. If the identity provider was unable to produce an identity assertion, reject p >- with a newly created NotReadableError and abort these steps. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: 'mock-idp.js?generatorAction=throw-error', >- usernameHint: `alice@${idpDomain}` >- }); >- >- return promise_rejects(t, 'NotReadableError', >- pc.createOffer()); >- }, 'createOffer() should reject with NotReadableError if identitity assertion request fails'); >- >- /* >- 4.4.2. Steps to create an answer >- 1. If the need for an identity assertion was identified when createAnswer was >- invoked, wait for the identity assertion request process to complete. >- >- 2. If the identity provider was unable to produce an identity assertion, reject p >- with a newly created NotReadableError and abort these steps. >- */ >- promise_test(t => { >- const pc = new RTCPeerConnection(); >- const port = window.location.port; >- const [idpDomain] = getIdpDomains(); >- >- pc.setIdentityProvider(hostString(idpDomain, port), { >- protocol: 'mock-idp.js?generatorAction=throw-error', >- usernameHint: `alice@${idpDomain}` >- }); >- >- return new RTCPeerConnection() >- .createOffer() >- .then(offer => pc.setRemoteDescription(offer)) >- .then(() => >- promise_rejects(t, 'NotReadableError', >- pc.createAnswer())); >- >- }, 'createAnswer() should reject with NotReadableError if identitity assertion request fails'); >- >-</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..11d948aadfa16267749df7ed524d6804463d934e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub-expected.txt >@@ -0,0 +1,24 @@ >+ >+FAIL getIdentityAssertion() should load IdP proxy and return assertion generated undefined is not a function (near '...pc.setIdentityProvider...') >+FAIL getIdentityAssertion() should succeed if mock-idp.js return different domain and protocol in assertion undefined is not a function (near '...pc.setIdentityProvider...') >+FAIL getIdentityAssertion() should reject with RTCError('idp-execution-failure') if mock-idp.js throws error assert_equals: Expect initial pc.idpErrorInfo to be null expected (object) null but got (undefined) undefined >+FAIL getIdentityAssertion() should reject with RTCError('idp-bad-script-failure') if IdP proxy script do not register its callback undefined is not a function (near '...pc.setIdentityProvider...') >+FAIL getIdentityAssertion() should reject with OperationError if mock-idp.js return invalid result undefined is not a function (near '...pc.setIdentityProvider...') >+FAIL getIdentityAssertion() should reject with RTCError('idp-load-failure') if IdP cannot be loaded pc.setIdentityProvider is not a function. (In 'pc.setIdentityProvider('nonexistent.localhost', { >+ protocol: `non-existent`, >+ usernameHint: `alice@example.org`, >+ })', 'pc.setIdentityProvider' is undefined) >+FAIL getIdentityAssertion() should reject with RTCError('idp-need-login') when mock-idp.js requires login assert_equals: Expect initial pc.idpLoginUrl to be null expected (object) null but got (undefined) undefined >+FAIL setIdentityProvider() with no peerIdentity provided should use peerIdentity value from getConfiguration() pc.setIdentityProvider is not a function. (In 'pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js' >+ })', 'pc.setIdentityProvider' is undefined) >+FAIL Calling setIdentityProvider() multiple times should reset identity assertions pc.setIdentityProvider is not a function. (In 'pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js?mark=first' >+ })', 'pc.setIdentityProvider' is undefined) >+FAIL createOffer() should return SDP containing identity assertion string if identity provider is set pc.setIdentityProvider is not a function. (In 'pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: 'mock-idp.js', >+ usernameHint: `alice@${idpDomain}` >+ })', 'pc.setIdentityProvider' is undefined) >+FAIL createOffer() should reject with NotReadableError if identitity assertion request fails undefined is not a function (near '...pc.setIdentityProvider...') >+FAIL createAnswer() should reject with NotReadableError if identitity assertion request fails undefined is not a function (near '...pc.setIdentityProvider...') >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2bd860d901ded78c9635da65413ac63e7dbf4460 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html >@@ -0,0 +1,400 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection.prototype.getIdentityAssertion</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="identity-helper.sub.js"></script> >+<script> >+ 'use strict'; >+ >+ // Test is based on the following editor draft: >+ // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html >+ >+ // The tests here interacts with the mock identity provider located at >+ // /.well-known/idp-proxy/mock-idp.js >+ >+ // The following helper functions are called from identity-helper.sub.js >+ // parseAssertionResult >+ // getIdpDomains >+ // assert_rtcerror_rejection >+ // hostString >+ >+ /* >+ 9.6. RTCPeerConnection Interface Extensions >+ partial interface RTCPeerConnection { >+ void setIdentityProvider(DOMString provider, >+ optional RTCIdentityProviderOptions options); >+ Promise<DOMString> getIdentityAssertion(); >+ readonly attribute Promise<RTCIdentityAssertion> peerIdentity; >+ readonly attribute DOMString? idpLoginUrl; >+ readonly attribute DOMString? idpErrorInfo; >+ }; >+ >+ dictionary RTCIdentityProviderOptions { >+ DOMString protocol = "default"; >+ DOMString usernameHint; >+ DOMString peerIdentity; >+ }; >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ >+ const [idpDomain] = getIdpDomains(); >+ const idpHost = hostString(idpDomain, port); >+ >+ pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js?foo=bar', >+ usernameHint: `alice@${idpDomain}`, >+ peerIdentity: 'bob@example.org' >+ }); >+ >+ return pc.getIdentityAssertion() >+ .then(assertionResultStr => { >+ const { idp, assertion } = parseAssertionResult(assertionResultStr); >+ >+ assert_equals(idp.domain, idpHost, >+ 'Expect mock-idp.js to construct domain from its location.host'); >+ >+ assert_equals(idp.protocol, 'mock-idp.js', >+ 'Expect mock-idp.js to return protocol of itself with no query string'); >+ >+ const { >+ watermark, >+ args, >+ env, >+ query, >+ } = assertion; >+ >+ assert_equals(watermark, 'mock-idp.js.watermark', >+ 'Expect assertion result to contain watermark left by mock-idp.js'); >+ >+ assert_equals(args.origin, window.origin, >+ 'Expect args.origin argument to be the origin of this window'); >+ >+ assert_equals(env.location, >+ `https://${idpHost}/.well-known/idp-proxy/idp-test.js?foo=bar`, >+ 'Expect IdP proxy to be loaded with full well-known URL constructed from provider and protocol'); >+ >+ assert_equals(env.origin, `https://${idpHost}`, >+ 'Expect IdP to have its own origin'); >+ >+ assert_equals(args.options.protocol, 'idp-test.js?foo=bar', >+ 'Expect options.protocol to be the same value as being passed from here'); >+ >+ assert_equals(args.options.usernameHint, `alice@${idpDomain}`, >+ 'Expect options.usernameHint to be the same value as being passed from here'); >+ >+ assert_equals(args.options.peerIdentity, 'bob@example.org', >+ 'Expect options.peerIdentity to be the same value as being passed from here'); >+ >+ assert_equals(query.foo, 'bar', >+ 'Expect query string to be parsed by mock-idp.js and returned back'); >+ }); >+ }, 'getIdentityAssertion() should load IdP proxy and return assertion generated'); >+ >+ // When generating assertion, the RTCPeerConnection doesn't care if the returned assertion >+ // represents identity of different domain >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ >+ const [idpDomain1, idpDomain2] = getIdpDomains(); >+ assert_not_equals(idpDomain1, idpDomain2, >+ 'Sanity check two idpDomains are different'); >+ >+ // Ask mock-idp.js to return a custom domain idpDomain2 and custom protocol foo >+ pc.setIdentityProvider(hostString(idpDomain1, port), { >+ protocol: `mock-idp.js?generatorAction=return-custom-idp&domain=${idpDomain2}&protocol=foo`, >+ usernameHint: `alice@${idpDomain2}`, >+ }); >+ >+ return pc.getIdentityAssertion() >+ .then(assertionResultStr => { >+ const { idp, assertion } = parseAssertionResult(assertionResultStr); >+ assert_equals(idp.domain, idpDomain2); >+ assert_equals(idp.protocol, 'foo'); >+ assert_equals(assertion.options.usernameHint, `alice@${idpDomain2}`); >+ }); >+ }, 'getIdentityAssertion() should succeed if mock-idp.js return different domain and protocol in assertion'); >+ >+ /* >+ 9.3. Requesting Identity Assertions >+ 4. If the IdP proxy produces an error or returns a promise that does not resolve to >+ a valid RTCIdentityValidationResult (see 9.5 IdP Error Handling), then identity >+ validation fails. >+ >+ 9.5. IdP Error Handling >+ - If an identity provider throws an exception or returns a promise that is ultimately >+ rejected, then the procedure that depends on the IdP MUST also fail. These types of >+ errors will cause an IdP failure with an RTCError with errorDetail set to >+ "idp-execution-failure". >+ >+ 9.6. RTCPeerConnection Interface Extensions >+ idpErrorInfo >+ An attribute that the IdP can use to pass additional information back to the >+ applications about the error. The format of this string is defined by the IdP and >+ may be JSON. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ assert_equals(pc.idpErrorInfo, null, >+ 'Expect initial pc.idpErrorInfo to be null'); >+ >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ // Ask mock-idp.js to throw an error with err.errorInfo set to bar >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: `mock-idp.js?generatorAction=throw-error&errorInfo=bar`, >+ usernameHint: `alice@${idpDomain}`, >+ }); >+ >+ return assert_rtcerror_rejection('idp-execution-failure', >+ pc.getIdentityAssertion()) >+ .then(() => { >+ assert_equals(pc.idpErrorInfo, 'bar', >+ 'Expect pc.idpErrorInfo to be set to the err.idpErrorInfo thrown by mock-idp.js'); >+ }); >+ }, `getIdentityAssertion() should reject with RTCError('idp-execution-failure') if mock-idp.js throws error`); >+ >+ /* >+ 9.5. IdP Error Handling >+ - If the script loaded from the identity provider is not valid JavaScript or does >+ not implement the correct interfaces, it causes an IdP failure with an RTCError >+ with errorDetail set to "idp-bad-script-failure". >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ // Ask mock-idp.js to not register its callback to the >+ // RTCIdentityProviderRegistrar >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: `mock-idp.js?action=do-not-register`, >+ usernameHint: `alice@${idpDomain}`, >+ }); >+ >+ return assert_rtcerror_rejection('idp-bad-script-failure', >+ pc.getIdentityAssertion()); >+ >+ }, `getIdentityAssertion() should reject with RTCError('idp-bad-script-failure') if IdP proxy script do not register its callback`); >+ >+ /* >+ 9.3. Requesting Identity Assertions >+ 4. If the IdP proxy produces an error or returns a promise that does not resolve >+ to a valid RTCIdentityAssertionResult (see 9.5 IdP Error Handling), then assertion >+ generation fails. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ // Ask mock-idp.js to return an invalid result that is not proper >+ // RTCIdentityAssertionResult >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: `mock-idp.js?generatorAction=return-invalid-result`, >+ usernameHint: `alice@${idpDomain}`, >+ }); >+ >+ return promise_rejects(t, 'OperationError', >+ pc.getIdentityAssertion()); >+ }, `getIdentityAssertion() should reject with OperationError if mock-idp.js return invalid result`); >+ >+ /* >+ 9.5. IdP Error Handling >+ - A RTCPeerConnection might be configured with an identity provider, but loading of >+ the IdP URI fails. Any procedure that attempts to invoke such an identity provider >+ and cannot load the URI fails with an RTCError with errorDetail set to >+ "idp-load-failure" and the httpRequestStatusCode attribute of the error set to the >+ HTTP status code of the response. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ pc.setIdentityProvider('nonexistent.{{domains[]}}', { >+ protocol: `non-existent`, >+ usernameHint: `alice@example.org`, >+ }); >+ >+ return assert_rtcerror_rejection('idp-load-failure', >+ pc.getIdentityAssertion()); >+ }, `getIdentityAssertion() should reject with RTCError('idp-load-failure') if IdP cannot be loaded`); >+ >+ /* >+ 9.3.1. User Login Procedure >+ Rejecting the promise returned by generateAssertion will cause the error to >+ propagate to the application. Login errors are indicated by rejecting the >+ promise with an RTCError with errorDetail set to "idp-need-login". >+ >+ The URL to login at will be passed to the application in the idpLoginUrl >+ attribute of the RTCPeerConnection. >+ >+ 9.5. IdP Error Handling >+ - If the identity provider requires the user to login, the operation will fail >+ RTCError with errorDetail set to "idp-need-login" and the idpLoginUrl attribute >+ of the error set to the URL that can be used to login. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ >+ assert_equals(pc.idpLoginUrl, null, >+ 'Expect initial pc.idpLoginUrl to be null'); >+ >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ const idpHost = hostString(idpDomain, port); >+ >+ pc.setIdentityProvider(idpHost, { >+ protocol: `mock-idp.js?generatorAction=require-login`, >+ usernameHint: `alice@${idpDomain}`, >+ }); >+ >+ return assert_rtcerror_rejection('idp-need-login', >+ pc.getIdentityAssertion()) >+ .then(err => { >+ assert_equals(err.idpLoginUrl, `https://${idpHost}/login`, >+ 'Expect err.idpLoginUrl to be set to url set by mock-idp.js'); >+ >+ assert_equals(pc.idpLoginUrl, `https://${idpHost}/login`, >+ 'Expect pc.idpLoginUrl to be set to url set by mock-idp.js'); >+ >+ assert_equals(pc.idpErrorInfo, 'login required', >+ 'Expect pc.idpErrorInfo to be set to info set by mock-idp.js'); >+ }); >+ }, `getIdentityAssertion() should reject with RTCError('idp-need-login') when mock-idp.js requires login`); >+ >+ /* >+ RTCIdentityProviderOptions Members >+ peerIdentity >+ The identity of the peer. For identity providers that bind their assertions to a >+ particular pair of communication peers, this allows them to generate an assertion >+ that includes both local and remote identities. If this value is omitted, but a >+ value is provided for the peerIdentity member of RTCConfiguration, the value from >+ RTCConfiguration is used. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection({ >+ peerIdentity: 'bob@example.net' >+ }); >+ >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ const idpHost = hostString(idpDomain, port); >+ >+ pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js' >+ }); >+ >+ return pc.getIdentityAssertion() >+ .then(assertionResultStr => { >+ const { assertion } = parseAssertionResult(assertionResultStr); >+ assert_equals(assertion.args.options.peerIdentity, 'bob@example.net'); >+ }); >+ }, 'setIdentityProvider() with no peerIdentity provided should use peerIdentity value from getConfiguration()'); >+ >+ /* >+ 9.6. setIdentityProvider >+ 3. If any identity provider value has changed, discard any stored identity assertion. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ const idpHost = hostString(idpDomain, port); >+ >+ pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js?mark=first' >+ }); >+ >+ return pc.getIdentityAssertion() >+ .then(assertionResultStr => { >+ const { assertion } = parseAssertionResult(assertionResultStr); >+ assert_equals(assertion.query.mark, 'first'); >+ >+ pc.setIdentityProvider(idpHost, { >+ protocol: 'mock-idp.js?mark=second' >+ }); >+ >+ return pc.getIdentityAssertion(); >+ }) >+ .then(assertionResultStr => { >+ const { assertion } = parseAssertionResult(assertionResultStr); >+ assert_equals(assertion.query.mark, 'second', >+ 'Expect generated assertion is from second IdP config'); >+ }); >+ }, `Calling setIdentityProvider() multiple times should reset identity assertions`); >+ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: 'mock-idp.js', >+ usernameHint: `alice@${idpDomain}` >+ }); >+ >+ return pc.getIdentityAssertion() >+ .then(assertionResultStr => >+ pc.createOffer() >+ .then(offer => { >+ assert_true(offer.sdp.includes(`\r\na=identity:${assertionResultStr}`, >+ 'Expect SDP to have a=identity line containing assertion string')); >+ })); >+ }, 'createOffer() should return SDP containing identity assertion string if identity provider is set'); >+ >+ /* >+ 4.4.2. Steps to create an offer >+ 1. If the need for an identity assertion was identified when createOffer was >+ invoked, wait for the identity assertion request process to complete. >+ 2. If the identity provider was unable to produce an identity assertion, reject p >+ with a newly created NotReadableError and abort these steps. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: 'mock-idp.js?generatorAction=throw-error', >+ usernameHint: `alice@${idpDomain}` >+ }); >+ >+ return promise_rejects(t, 'NotReadableError', >+ pc.createOffer()); >+ }, 'createOffer() should reject with NotReadableError if identitity assertion request fails'); >+ >+ /* >+ 4.4.2. Steps to create an answer >+ 1. If the need for an identity assertion was identified when createAnswer was >+ invoked, wait for the identity assertion request process to complete. >+ >+ 2. If the identity provider was unable to produce an identity assertion, reject p >+ with a newly created NotReadableError and abort these steps. >+ */ >+ promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ const port = window.location.port; >+ const [idpDomain] = getIdpDomains(); >+ >+ pc.setIdentityProvider(hostString(idpDomain, port), { >+ protocol: 'mock-idp.js?generatorAction=throw-error', >+ usernameHint: `alice@${idpDomain}` >+ }); >+ >+ return new RTCPeerConnection() >+ .createOffer() >+ .then(offer => pc.setRemoteDescription(offer)) >+ .then(() => >+ promise_rejects(t, 'NotReadableError', >+ pc.createAnswer())); >+ >+ }, 'createAnswer() should reject with NotReadableError if identitity assertion request fails'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html >index 73138507d4f12a2fc9385a27909fd1a69be622ae..ac69ee5e28dff16f9a9175c19cb691cca5878c89 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html >@@ -39,12 +39,12 @@ > 1. Gather the stats indicated by selector according to the stats selection algorithm. > 2. Resolve p with the resulting RTCStatsReport object, containing the gathered stats. > */ >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > return pc.getStats(); > }, 'getStats() with no argument should succeed'); > >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > return pc.getStats(null); > }, 'getStats(null) should succeed'); >@@ -160,7 +160,7 @@ > - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats > objects added. > */ >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > return getTrackFromUserMedia('audio') > .then(([track, mediaStream]) => { >@@ -183,7 +183,7 @@ > - All stats objects referenced directly or indirectly by the RTCInboundRTPStreamStats > added. > */ >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > const transceiver = pc.addTransceiver('audio'); > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-helper.js b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-helper.js >index 8ccebbd867f05a2679da5d1641bd88f496db0fa6..34e0d75903c68d100627c5b41302db2212365a98 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-helper.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-helper.js >@@ -229,7 +229,7 @@ function exchangeIceCandidates(pc1, pc2) { > // There is ongoing discussion on w3c/webrtc-pc#1213 > // that there should be an empty candidate string event > // for end of candidate for each m= section. >- if(candidate) { >+ if(candidate && remotePc.signalingState !== 'closed') { > remotePc.addIceCandidate(candidate); > } > }); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-peerIdentity.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-peerIdentity.html >index d5f9db9d5d0887b70b7b2babd49a5bbadad07856..68d9f209a9e3884e1767fcade5eafedc686defba 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-peerIdentity.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-peerIdentity.html >@@ -3,7 +3,7 @@ > <title>RTCPeerConnection.prototype.peerIdentity</title> > <script src="/resources/testharness.js"></script> > <script src="/resources/testharnessreport.js"></script> >-<script src="identity-helper.js"></script> >+<script src="identity-helper.sub.js"></script> > <script> > 'use strict'; > >@@ -13,7 +13,7 @@ > // The tests here interacts with the mock identity provider located at > // /.well-known/idp-proxy/mock-idp.js > >- // The following helper functions are called from identity-helper.js >+ // The following helper functions are called from identity-helper.sub.js > // parseAssertionResult > // getIdpDomains > // assert_rtcerror_rejection >@@ -54,7 +54,7 @@ > is, there is a current value for peerIdentity ), then this also establishes a > target peer identity. > */ >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt >index 897129a16eae3af755ca5bcb8c41688848b312c8..c07e4ca07f5fb9c375e4b346a4827a596da61828 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt >@@ -1,6 +1,6 @@ > > FAIL setLocalDescription(offer) with m= section should assign mid to corresponding transceiver assert_equals: Expect transceiver.mid to set to valid string value expected "string" but got "object" >-FAIL setRemoteDescription(offer) with m= section and no existing transceiver should create corresponding transceiver promise_test: Unhandled rejection with value: object "TypeError: pc2.setRemoteDescrption is not a function. (In 'pc2.setRemoteDescrption(offer)', 'pc2.setRemoteDescrption' is undefined)" >+FAIL setRemoteDescription(offer) with m= section and no existing transceiver should create corresponding transceiver assert_equals: Expect new transceiver added to pc2 after setRemoteDescription expected 1 but got 0 > FAIL setLocalDescription(rollback) should unset transceiver.mid assert_not_equals: got disallowed value null > FAIL setLocalDescription(rollback) should only unset transceiver mids associated with current round assert_not_equals: got disallowed value null > FAIL setRemoteDescription(rollback) should remove newly created transceiver from transceiver list assert_equals: expected 1 but got 0 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >index ed41d66319e14a54287ed6ec3726ecb667ef8d84..d19b4747df1d57a9b94b89ec8ec7533f1a51973e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html >@@ -64,7 +64,7 @@ > 2. Set transceiver's mid value to the mid of the corresponding media > description. > */ >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > const transceiver = pc.addTransceiver('audio'); > assert_equals(transceiver.mid, null); >@@ -97,7 +97,7 @@ > transceiver be the result. > 3. Set transceiver's mid value to the mid of the corresponding media description. > */ >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >@@ -109,7 +109,7 @@ > .then(offer => { > return Promise.all([ > pc1.setLocalDescription(offer), >- pc2.setRemoteDescrption(offer) >+ pc2.setRemoteDescription(offer) > ]) > .then(() => { > const transceivers = pc2.getTransceivers(); >@@ -137,7 +137,7 @@ > the RTCSessionDescription that is being rolled back, set the mid value > of that transceiver to null, as described by [JSEP] (section 4.1.8.2.). > */ >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > const transceiver = pc.addTransceiver('audio'); > assert_equals(transceiver.mid, null); >@@ -157,7 +157,7 @@ > }); > }, 'setLocalDescription(rollback) should unset transceiver.mid'); > >- promise_test(() => { >+ promise_test(t => { > const pc = new RTCPeerConnection(); > const transceiver1 = pc.addTransceiver('audio'); > assert_equals(transceiver1.mid, null); >@@ -202,7 +202,7 @@ > addTrack, remove that transceiver from connection's set of transceivers, > as described by [JSEP] (section 4.1.8.2.). > */ >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-expected.txt >index c2d9dd199bffbcf9160d6ccb8d943c01e0f1827f..0454993c49f8b780673eec7f345b0deb040f31c1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-expected.txt >@@ -1,8 +1,7 @@ > > PASS setRemoteDescription with invalid type and invalid SDP should reject with TypeError > PASS setRemoteDescription() with invalid SDP and stable state should reject with InvalidStateError >+PASS Negotiation should fire signalingsstate events > FAIL Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed assert_false: Expect both session descriptions to have different count of media lines expected false got true > PASS Switching role from offerer to answerer after going back to stable state should succeed >-PASS Test onsignalingstatechange event for Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed >-PASS Test onsignalingstatechange event for Switching role from offerer to answerer after going back to stable state should succeed > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..603a73b6aaec9eba7c64a62a27d7e31a5a32802c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt >@@ -0,0 +1,8 @@ >+ >+PASS replaceTrack() sets the track attribute to a new track. >+PASS replaceTrack() sets the track attribute to null. >+PASS replaceTrack() does not set the track synchronously. >+PASS replaceTrack() rejects when the peer connection is closed. >+FAIL replaceTrack() rejects when invoked after removeTrack(). assert_equals: expected "InvalidModificationError" but got "InvalidStateError" >+FAIL replaceTrack() rejects after a subsequent removeTrack(). assert_unreached: Expected replaceTrack() to be rejected with InvalidModificationError but the promise was resolved. Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..06408d072afda8acc9790b8fc152e16561cf780f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html >@@ -0,0 +1,139 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection.prototype.setRemoteDescription - replaceTrack</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="RTCPeerConnection-helper.js"></script> >+<script> >+ 'use strict'; >+ >+ // The following helper functions are called from RTCPeerConnection-helper.js: >+ // getUserMediaTracksAndStreams >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ return sender.replaceTrack(tracks[1]) >+ .then(t.step_func(() => { >+ assert_equals(sender.track, tracks[1]); >+ t.done(); >+ })); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() sets the track attribute to a new track.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ return sender.replaceTrack(null) >+ .then(t.step_func(() => { >+ assert_equals(sender.track, null); >+ t.done(); >+ })); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() sets the track attribute to null.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ assert_equals(sender.track, tracks[0]); >+ sender.replaceTrack(tracks[1]); >+ // replaceTrack() is asynchronous, there should be no synchronously >+ // observable effects. >+ assert_equals(sender.track, tracks[0]); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() does not set the track synchronously.'); >+ >+ async_test(t => { >+ const expectedException = 'InvalidStateError'; >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ caller.close(); >+ return sender.replaceTrack(tracks[1]) >+ .then(t.step_func(() => { >+ assert_unreached('Expected replaceTrack() to be rejected with ' + >+ expectedException + ' but the promise was resolved.'); >+ }), >+ t.step_func(e => { >+ assert_equals(e.name, expectedException); >+ t.done(); >+ })); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() rejects when the peer connection is closed.'); >+ >+ async_test(t => { >+ const expectedException = 'InvalidModificationError'; >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ caller.removeTrack(sender); >+ // replaceTrack() should fail because the sender should be inactive after >+ // removeTrack(). >+ return sender.replaceTrack(tracks[1]) >+ .then(t.step_func(() => { >+ assert_unreached('Expected replaceTrack() to be rejected with ' + >+ expectedException + ' but the promise was resolved.'); >+ }), >+ t.step_func(e => { >+ assert_equals(e.name, expectedException); >+ t.done(); >+ })); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() rejects when invoked after removeTrack().'); >+ >+ async_test(t => { >+ const expectedException = 'InvalidModificationError'; >+ const caller = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ let p = sender.replaceTrack(tracks[1]) >+ caller.removeTrack(sender); >+ // replaceTrack() should fail because it executes steps in parallel and >+ // queues a task to execute after removeTrack() has occurred. The sender >+ // should be inactive. If this can be racy, update or remove the test. >+ // https://github.com/w3c/webrtc-pc/issues/1728 >+ return p.then(t.step_func(() => { >+ assert_unreached('Expected replaceTrack() to be rejected with ' + >+ expectedException + ' but the promise was resolved.'); >+ }), >+ t.step_func(e => { >+ assert_equals(e.name, expectedException); >+ t.done(); >+ })); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() rejects after a subsequent removeTrack().'); >+ >+ // TODO(hbos): Verify that replaceTrack() changes what media is received on >+ // the remote end of two connected peer connections. For video tracks, this >+ // requires Chromium's video tag to update on receiving frames when running >+ // content_shell. https://crbug.com/793808 >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1cb8d7d65c0d9dededa57b0e16b1ce0a9d4cd6f0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https-expected.txt >@@ -0,0 +1,18 @@ >+ >+Harness Error (TIMEOUT), message = null >+ >+FAIL addTrack() with a track and no stream makes ontrack fire with a track and no stream. assert_equals: Expected remote track not to belong to a stream. expected 0 but got 1 >+PASS addTrack() with a track and a stream makes ontrack fire with a track and a stream. >+PASS ontrack fires before setRemoteDescription resolves. >+FAIL addTrack() with two tracks and one stream makes ontrack fire twice with the tracks and shared stream. assert_equals: Expected the remote stream to contain two tracks. expected 2 but got 1 >+FAIL addTrack() for an existing stream makes stream.onaddtrack fire. assert_array_equals: Expected the remote stream's tracks to be the remote tracks. property 0, expected object "[object MediaStreamTrack]" but got object "[object MediaStreamTrack]" >+PASS stream.onaddtrack fires before setRemoteDescription resolves. >+FAIL addTrack() with a track and two streams makes ontrack fire with a track and two streams. Cannot access uninitialized variable. >+PASS ontrack's receiver matches getReceivers(). >+PASS removeTrack() does not remove the receiver. >+TIMEOUT removeTrack() makes stream.onremovetrack fire and the track to be removed from the stream. Test timed out >+TIMEOUT stream.onremovetrack fires before setRemoteDescription resolves. Test timed out >+TIMEOUT removeTrack() makes track.onmute fire and the track to be muted. Test timed out >+TIMEOUT track.onmute fires before setRemoteDescription resolves. Test timed out >+PASS removeTrack() twice is safe. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d4663e5373be5445a0f207dc9bf2fb498426ff70 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html >@@ -0,0 +1,426 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection.prototype.setRemoteDescription - add/remove remote tracks</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="RTCPeerConnection-helper.js"></script> >+<script> >+ 'use strict'; >+ >+ // Test is based on the following editor draft: >+ // https://w3c.github.io/webrtc-pc/archives/20171002/webrtc.html >+ >+ // The following helper functions are called from RTCPeerConnection-helper.js: >+ // getUserMediaTracksAndStreams >+ // performOffer >+ // Resolver >+ >+ // These tests are concerned with the observable consequences of processing >+ // the addition or removal of remote tracks, including events firing and the >+ // states of RTCPeerConnection, MediaStream and MediaStreamTrack. >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTrack = tracks[0]; >+ caller.addTrack(localTrack); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ const remoteTrack = trackEvent.track; >+ assert_equals(remoteTrack.id, localTrack.id, >+ 'Expected local and remote track IDs to match.'); >+ assert_equals(trackEvent.streams.length, 0, >+ 'Expected remote track not to belong to a stream.'); >+ t.done(); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with a track and no stream makes ontrack fire with a track and no stream.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTrack = tracks[0]; >+ const localStream = streams[0]; >+ caller.addTrack(localTrack, localStream); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_equals(trackEvent.streams.length, 1, >+ 'Expected track event to fire with a single stream.'); >+ const remoteTrack = trackEvent.track; >+ const remoteStream = trackEvent.streams[0]; >+ assert_equals(remoteTrack.id, localTrack.id, >+ 'Expected local and remote track IDs to match.'); >+ assert_equals(remoteStream.id, localStream.id, >+ 'Expected local and remote stream IDs to match.'); >+ assert_array_equals(remoteStream.getTracks(), [remoteTrack], >+ 'Expected the remote stream\'s tracks to be the remote track.'); >+ t.done(); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with a track and a stream makes ontrack fire with a track and a stream.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let eventSequence = ''; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const ontrackResolver = new Resolver(); >+ callee.ontrack = () => { >+ eventSequence += 'ontrack;'; >+ ontrackResolver.resolve(); >+ } >+ caller.addTrack(tracks[0]); >+ return Promise.all([ >+ ontrackResolver.promise, >+ performOffer(caller, callee).then(() => { >+ eventSequence += 'setRemoteDescription;'; >+ }) >+ ]); >+ })) >+ .then(t.step_func(() => { >+ assert_equals(eventSequence, 'ontrack;setRemoteDescription;'); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'ontrack fires before setRemoteDescription resolves.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTrack1 = tracks[0]; >+ const localTrack2 = tracks[1]; >+ const localStream = streams[0]; >+ caller.addTrack(localTrack1, localStream); >+ caller.addTrack(localTrack2, localStream); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_equals(trackEvent.streams.length, 1, >+ 'Expected track event to fire with a single stream.'); >+ const remoteTrack1 = trackEvent.track; >+ const remoteStream = trackEvent.streams[0]; >+ assert_equals(remoteTrack1.id, localTrack1.id, >+ 'Expected first remote track ID to match first local track ID.'); >+ assert_equals(remoteStream.getTracks().length, 2, >+ 'Expected the remote stream to contain two tracks.'); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_equals(trackEvent.streams.length, 1, >+ 'Expected track event to fire with a single stream.'); >+ const remoteTrack2 = trackEvent.track; >+ assert_equals(trackEvent.streams[0], remoteStream, >+ 'Expected both track events to fire with the same remote stream.'); >+ assert_equals(remoteTrack2.id, localTrack2.id, >+ 'Expected second remote track ID to match second local track ID.'); >+ assert_equals(remoteStream.getTracks().length, 2, >+ 'Expected the remote stream to contain two tracks.'); >+ assert_array_equals(remoteStream.getTracks(), [remoteTrack1, remoteTrack2], >+ 'Expected the remote stream\'s tracks to be the [first, second] remote tracks.'); >+ t.done(); >+ }); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with two tracks and one stream makes ontrack fire twice with the tracks and shared stream.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTracks = tracks; >+ const localStream = streams[0]; >+ caller.addTrack(localTracks[0], localStream); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_equals(trackEvent.streams.length, 1, >+ 'Expected track event to fire with a single stream.'); >+ const remoteTracks = [ trackEvent.track ]; >+ const remoteStream = trackEvent.streams[0]; >+ assert_equals(remoteTracks[0].id, localTracks[0].id, 'Remote track ID.'); >+ assert_equals(remoteStream.id, localStream.id, 'Remote stream ID.'); >+ assert_array_equals(remoteStream.getTracks(), remoteTracks, >+ 'Expected the remote stream\'s tracks to be the remote track.'); >+ caller.addTrack(localTracks[1], localStream); >+ performOffer(caller, callee); >+ remoteStream.onaddtrack = t.step_func(trackEvent => { >+ remoteTracks.push(trackEvent.track); >+ assert_equals(remoteTracks[1].id, localTracks[1].id, 'Remote track ID.'); >+ assert_array_equals(remoteStream.getTracks(), remoteTracks, >+ 'Expected the remote stream\'s tracks to be the remote tracks.'); >+ t.done(); >+ }); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() for an existing stream makes stream.onaddtrack fire.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let eventSequence = ''; >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTracks = tracks; >+ const localStream = streams[0]; >+ caller.addTrack(localTracks[0], localStream); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ callee.ontrack = null; >+ const remoteStream = trackEvent.streams[0]; >+ const onaddtrackResolver = new Resolver(); >+ remoteStream.onaddtrack = () => { >+ eventSequence += 'stream.onaddtrack;'; >+ onaddtrackResolver.resolve(); >+ } >+ caller.addTrack(localTracks[1], localStream); >+ Promise.all([ >+ onaddtrackResolver.promise, >+ performOffer(caller, callee).then(() => { >+ eventSequence += 'setRemoteDescription;'; >+ }) >+ ]).then(t.step_func(() => { >+ assert_equals(eventSequence, 'stream.onaddtrack;setRemoteDescription;'); >+ t.done(); >+ })); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'stream.onaddtrack fires before setRemoteDescription resolves.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ const localTrack = tracks[0]; >+ const localStreams = streams; >+ caller.addTrack(localTrack, localStreams[0], localStreams[1]); >+ const performOffer = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_equals(trackEvent.streams.length, 2, >+ 'Expected the track event to fire with two streams.'); >+ const remoteTrack = trackEvent.track; >+ const remoteStreams = trackEvent.streams; >+ assert_equals(remoteTrack.id, localTrack.id, >+ 'Expected local and remote track IDs to match.'); >+ assert_equals(remoteStreams[0].id, localStreams[0].id, >+ 'Expected the first remote stream ID to match the first local stream ID.'); >+ assert_equals(remoteStreams[1].id, localStreams[1].id, >+ 'Expected the second remote stream ID to match the second local stream ID.'); >+ assert_array_equals(remoteStreams[0].getTracks(), [remoteTrack], >+ 'Expected the remote stream\'s tracks to be the remote track.'); >+ assert_array_equals(remoteStreams[1].getTracks(), [remoteTrack], >+ 'Expected the remote stream\'s tracks to be the remote track.'); >+ t.done(); >+ }); >+ return performOffer; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with a track and two streams makes ontrack fire with a track and two streams.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ caller.addTrack(tracks[0]); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_array_equals(callee.getReceivers(), [trackEvent.receiver]); >+ t.done(); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'ontrack\'s receiver matches getReceivers().'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0]); >+ assert_not_equals(sender, null); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ const receivers = callee.getReceivers(); >+ assert_equals(receivers.length, 1, >+ 'Expected getReceivers() to be the track event\'s receiver.'); >+ caller.removeTrack(sender); >+ performOffer(caller, callee) >+ .then(t.step_func(() => { >+ assert_array_equals(callee.getReceivers(), receivers, >+ 'Expected the set of receivers to remain the same.'); >+ t.done(); >+ })); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'removeTrack() does not remove the receiver.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ assert_not_equals(sender, null); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ assert_not_equals(trackEvent.track, null); >+ assert_equals(trackEvent.streams.length, 1); >+ assert_true(trackEvent.streams[0].getTracks().includes(trackEvent.track)); >+ caller.removeTrack(sender); >+ performOffer(caller, callee); >+ trackEvent.streams[0].onremovetrack = t.step_func(removeEvent => { >+ assert_equals(removeEvent.track, trackEvent.track); >+ assert_false(trackEvent.streams[0].getTracks().includes(trackEvent.track)); >+ t.done(); >+ }); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'removeTrack() makes stream.onremovetrack fire and the track to be removed from the stream.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let eventSequence = ''; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0], streams[0]); >+ assert_not_equals(sender, null); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ const remoteStream = trackEvent.streams[0]; >+ const onremovetrackResolver = new Resolver(); >+ remoteStream.onremovetrack = t.step_func(removeEvent => { >+ eventSequence += 'stream.onremovetrack;'; >+ onremovetrackResolver.resolve(); >+ }); >+ caller.removeTrack(sender); >+ return Promise.all([ >+ onremovetrackResolver.promise, >+ performOffer(caller, callee).then(() => { >+ eventSequence += 'setRemoteDescription;'; >+ }) >+ ]).then(t.step_func(() => { >+ assert_equals(eventSequence, 'stream.onremovetrack;setRemoteDescription;'); >+ t.done(); >+ })); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'stream.onremovetrack fires before setRemoteDescription resolves.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0]); >+ assert_not_equals(sender, null); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ const remoteTrack = trackEvent.track; >+ caller.removeTrack(sender); >+ performOffer(caller, callee); >+ remoteTrack.onmute = t.step_func(() => { >+ assert_true(trackEvent.track.muted); >+ t.done(); >+ }); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'removeTrack() makes track.onmute fire and the track to be muted.'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let eventSequence = ''; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = caller.addTrack(tracks[0]); >+ assert_not_equals(sender, null); >+ const offerPromise = performOffer(caller, callee); >+ callee.ontrack = t.step_func(trackEvent => { >+ const remoteTrack = trackEvent.track; >+ const onmuteResolver = new Resolver(); >+ remoteTrack.onmute = t.step_func(() => { >+ eventSequence += 'track.onmute;'; >+ onmuteResolver.resolve(); >+ }); >+ caller.removeTrack(sender); >+ return Promise.all([ >+ onmuteResolver.promise, >+ performOffer(caller, callee).then(() => { >+ eventSequence += 'setRemoteDescription;'; >+ }) >+ ]).then(t.step_func(() => { >+ assert_equals(eventSequence, 'track.onmute;setRemoteDescription;'); >+ t.done(); >+ })); >+ }); >+ return offerPromise; >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'track.onmute fires before setRemoteDescription resolves.'); >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ const sender = pc.addTrack(tracks[0]); >+ assert_not_equals(sender, null); >+ pc.removeTrack(sender); >+ pc.removeTrack(sender); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'removeTrack() twice is safe.'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html >index 2efd30190031f8f5a2e1b6d6bab12d5af111e123..1dbcf41118af885c12a9cfeaf04407cc4bf39c06 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html >@@ -11,11 +11,8 @@ > // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html > > // The following helper functions are called from RTCPeerConnection-helper.js: >- // generateOffer() >- // generateAnswer() > // assert_session_desc_not_equals() > // assert_session_desc_equals() >- // test_state_change_event() > > /* > 4.3.2. Interface Definition >@@ -48,76 +45,99 @@ > /* > 4.6.1. enum RTCSdpType > */ >- promise_test(t => { >+ promise_test(async t => { > const pc = new RTCPeerConnection(); >+ t.add_cleanup(() => pc.close()); > > // SDP is validated after WebIDL validation >- return promise_rejects(t, new TypeError(), >- pc.setRemoteDescription({ >- type: 'bogus', >- sdp: 'bogus' >- })); >+ try { >+ await pc.setRemoteDescription({ type: 'bogus', sdp: 'bogus' }); >+ t.unreached_func("Should have rejected."); >+ } catch (e) { >+ assert_throws(new TypeError(), () => { throw e }); >+ } > }, 'setRemoteDescription with invalid type and invalid SDP should reject with TypeError'); > >- promise_test(t => { >+ promise_test(async t => { > const pc = new RTCPeerConnection(); >+ t.add_cleanup(() => pc.close()); > > // SDP is validated after validating type >- return promise_rejects(t, 'InvalidStateError', >- pc.setRemoteDescription({ >- type: 'answer', >- sdp: 'invalid' >- })); >+ try { >+ await pc.setRemoteDescription({ type: 'answer', sdp: 'invalid' }); >+ t.unreached_func("Should have rejected."); >+ } catch (e) { >+ assert_throws('InvalidStateError', () => { throw e }); >+ } > }, 'setRemoteDescription() with invalid SDP and stable state should reject with InvalidStateError'); > >- /* Operations after returning to stable state */ >+ /* Dedicated signalingstate events test. */ > >- promise_test(t => { >+ promise_test(async t => { > const pc = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); >+ t.add_cleanup(() => pc.close()); >+ t.add_cleanup(() => pc2.close()); >+ >+ let eventCount = 0; >+ const states = [ >+ 'stable', 'have-local-offer', 'stable', 'have-remote-offer', >+ ]; >+ pc.onsignalingstatechange = t.step_func(() => >+ assert_equals(pc.signalingState, states[++eventCount])); >+ >+ const assert_state = state => { >+ assert_equals(state, pc.signalingState); >+ assert_equals(state, states[eventCount]); >+ }; >+ >+ const offer = await pc.createOffer({ offerToReceiveAudio: true }); >+ assert_state('stable'); >+ await pc.setLocalDescription(offer); >+ assert_state('have-local-offer'); >+ await pc2.setRemoteDescription(offer); >+ await pc2.setLocalDescription(await pc2.createAnswer()); >+ await pc.setRemoteDescription(pc2.localDescription); >+ assert_state('stable'); >+ await pc.setRemoteDescription(await pc2.createOffer()); >+ assert_state('have-remote-offer'); >+ }, 'Negotiation should fire signalingsstate events'); > >- test_state_change_event(t, pc, >- ['have-remote-offer', 'stable', 'have-remote-offer']); >- >- return pc2.createOffer({ offerToReceiveAudio: true }) >- .then(offer1 => >- pc.setRemoteDescription(offer1) >- .then(() => pc.createAnswer()) >- .then(answer => pc.setLocalDescription(answer)) >- .then(() => pc2.createOffer({ offerToReceiveVideo: true })) >- .then(offer2 => { >- return pc.setRemoteDescription(offer2) >- .then(() => { >- assert_equals(pc.signalingState, 'have-remote-offer'); >- assert_session_desc_not_equals(offer1, offer2); >- assert_session_desc_equals(pc.remoteDescription, offer2); >- assert_session_desc_equals(pc.currentRemoteDescription, offer1); >- assert_session_desc_equals(pc.pendingRemoteDescription, offer2); >- }); >- })); >- }, 'Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed'); >+ /* Operations after returning to stable state */ > >- promise_test(t => { >+ promise_test(async t => { > const pc = new RTCPeerConnection(); >+ const pc2 = new RTCPeerConnection(); >+ t.add_cleanup(() => pc.close()); >+ t.add_cleanup(() => pc2.close()); >+ >+ const offer1 = await pc2.createOffer({ offerToReceiveAudio: true }); >+ await pc.setRemoteDescription(offer1); >+ await pc.setLocalDescription(await pc.createAnswer()); >+ const offer2 = await pc2.createOffer({ offerToReceiveVideo: true }); >+ await pc.setRemoteDescription(offer2); >+ assert_session_desc_not_equals(offer1, offer2); >+ assert_session_desc_equals(pc.remoteDescription, offer2); >+ assert_session_desc_equals(pc.currentRemoteDescription, offer1); >+ assert_session_desc_equals(pc.pendingRemoteDescription, offer2); >+ }, 'Calling setRemoteDescription() again after one round of remote-offer/local-answer should succeed'); > >- test_state_change_event(t, pc, >- ['have-local-offer', 'stable', 'have-remote-offer']); >- >- return pc.createOffer({ offerToReceiveAudio: true }) >- .then(offer => >- pc.setLocalDescription(offer) >- .then(() => generateAnswer(offer))) >- .then(answer => >- pc.setRemoteDescription(answer) >- .then(() => generateOffer({ pc, data: true })) >- .then(offer => >- pc.setRemoteDescription(offer) >- .then(() => { >- assert_equals(pc.signalingState, 'have-remote-offer'); >- assert_session_desc_equals(pc.remoteDescription, offer); >- assert_session_desc_equals(pc.currentRemoteDescription, answer); >- assert_session_desc_equals(pc.pendingRemoteDescription, offer); >- }))); >+ promise_test(async t => { >+ const pc = new RTCPeerConnection(); >+ const pc2 = new RTCPeerConnection(); >+ t.add_cleanup(() => pc.close()); >+ t.add_cleanup(() => pc2.close()); >+ >+ const offer = await pc.createOffer({ offerToReceiveAudio: true }); >+ await pc.setLocalDescription(offer); >+ await pc2.setRemoteDescription(offer); >+ const answer = await pc2.createAnswer(); >+ await pc2.setLocalDescription(answer); >+ await pc.setRemoteDescription(answer); >+ await pc.setRemoteDescription(await pc2.createOffer()); >+ assert_equals(pc.remoteDescription.sdp, pc.pendingRemoteDescription.sdp); >+ assert_session_desc_equals(pc.remoteDescription, offer); >+ assert_session_desc_equals(pc.currentRemoteDescription, answer); > }, 'Switching role from offerer to answerer after going back to stable state should succeed'); > > /* >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2ce65597c05632c9b7a53add73d0ffaea51a6d7d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https-expected.txt >@@ -0,0 +1,20 @@ >+ >+FAIL addTrack() without setLocalDescription() yields track stats assert_true: Has stats for track expected true got false >+FAIL addTrack() without setLocalDescription() yields media stream stats assert_true: Has stats for stream expected true got false >+PASS addTrack() with setLocalDescription() yields track stats >+FAIL addTrack() with setLocalDescription() yields media stream stats assert_true: Has stats for stream expected true got false >+FAIL addTrack(): Media stream stats references track stats assert_true: Has stats for track and stream expected true got false >+FAIL Legacy addStream(): Media stream stats references track stats assert_true: Has stats for track and stream expected true got false >+FAIL O/A exchange yields outbound RTP stream stats for sending track assert_true: Has stats for outbound RTP stream expected true got false >+FAIL O/A exchange yields inbound RTP stream stats for receiving track assert_true: Has stats for outbound RTP stream expected true got false >+FAIL replaceTrack() before offer: new track attachment stats present assert_true: Has stats for replaced track expected true got false >+FAIL replaceTrack() after offer, before answer: new track attachment stats present assert_true: Has stats for replaced track expected true got false >+FAIL replaceTrack() after answer: new track attachment stats present assert_true: Has stats for replaced track expected true got false >+FAIL replaceTrack(): original track attachment stats present after replacing assert_true: expected true got undefined >+FAIL RTCRtpSender.getStats() contains only outbound-rtp and related stats assert_true: Has stats for outbound RTP stream expected true got false >+FAIL RTCRtpReceiver.getStats() contains only inbound-rtp and related stats assert_true: Has stats for outbound RTP stream expected true got false >+FAIL RTCPeerConnection.getStats(sendingTrack) is the same as RTCRtpSender.getStats() promise_test: Unhandled rejection with value: object "TypeError: sender.getStats is not a function. (In 'sender.getStats()', 'sender.getStats' is undefined)" >+FAIL RTCPeerConnection.getStats(receivingTrack) is the same as RTCRtpReceiver.getStats() promise_test: Unhandled rejection with value: object "TypeError: receiver.getStats is not a function. (In 'receiver.getStats()', 'receiver.getStats' is undefined)" >+FAIL RTCPeerConnection.getStats(track) throws InvalidAccessError when there are zero senders or receivers for the track assert_unreached: Should have rejected: undefined Reached unreachable code >+FAIL RTCPeerConnection.getStats(track) throws InvalidAccessError when there are multiple senders for the track assert_unreached: Should have rejected: undefined Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d833eb9ce112708e3bfd02edb0cf3b77ea29bcb2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html >@@ -0,0 +1,628 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection.prototype.getStats</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="RTCPeerConnection-helper.js"></script> >+<script src="dictionary-helper.js"></script> >+<script src="RTCStats-helper.js"></script> >+<script> >+ 'use strict'; >+ >+ // The following helper functions are called from RTCPeerConnection-helper.js: >+ // doSignalingHandshake >+ // getUserMediaTracksAndStreams >+ >+ // The following helper functions are called from RTCStats-helper.js >+ // (depends on dictionary-helper.js): >+ // validateRtcStats >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let track; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ track = tracks[0]; >+ pc.addTrack(track); >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', track.id); >+ assert_true(trackStats != null, 'Has stats for track'); >+ // TODO(hbos): Here and elsewhere, validateRtcStats() only tests id, >+ // timestamp and type is correct type. Should validate based on stats type >+ // but it expects both audio and video members. >+ // https://github.com/web-platform-tests/wpt/issues/9010 >+ validateRtcStats(report, trackStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() without setLocalDescription() yields track stats'); >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let stream; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ let track = tracks[0]; >+ stream = streams[0]; >+ pc.addTrack(track, stream); >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let streamStats = findStatsByTypeAndId(report, 'stream', stream.id); >+ assert_true(streamStats != null, 'Has stats for stream'); >+ validateRtcStats(report, streamStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() without setLocalDescription() yields media stream stats'); >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let track; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ track = tracks[0]; >+ pc.addTrack(track); >+ return pc.createOffer(); >+ })) >+ .then(t.step_func(offer => { >+ return pc.setLocalDescription(offer); >+ })) >+ .then(t.step_func(() => { >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', track.id); >+ assert_true(trackStats != null, 'Has stats for track'); >+ validateRtcStats(report, trackStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with setLocalDescription() yields track stats'); >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let stream; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ let track = tracks[0]; >+ stream = streams[0]; >+ pc.addTrack(track, stream); >+ return pc.createOffer(); >+ })) >+ .then(t.step_func(offer => { >+ return pc.setLocalDescription(offer); >+ })) >+ .then(t.step_func(() => { >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let streamStats = findStatsByTypeAndId(report, 'stream', stream.id); >+ assert_true(streamStats != null, 'Has stats for stream'); >+ validateRtcStats(report, streamStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack() with setLocalDescription() yields media stream stats'); >+ >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let track; >+ let stream; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ track = tracks[0]; >+ stream = streams[0]; >+ pc.addTrack(track, stream); >+ return pc.createOffer(); >+ })) >+ .then(t.step_func(offer => { >+ return pc.setLocalDescription(offer); >+ })) >+ .then(t.step_func(() => { >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', track.id); >+ let streamStats = findStatsByTypeAndId(report, 'stream', stream.id); >+ assert_true(trackStats != null && streamStats != null, >+ 'Has stats for track and stream'); >+ assert_array_equals(streamStats.trackIds, [ trackStats.id ], >+ 'streamStats.trackIds == [ trackStats.id ]'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, streamStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'addTrack(): Media stream stats references track stats'); >+ >+ // TODO(hbos): addStream() is legacy API not in the spec. Based on discussion >+ // whether to standardize in legacy section, consider removing this test or >+ // keeping it until addTrack() has wide support. >+ // https://github.com/w3c/webrtc-pc/issues/1705 >+ // https://github.com/w3c/webrtc-pc/issues/1125 >+ async_test(t => { >+ const pc = new RTCPeerConnection(); >+ let track; >+ let stream; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ track = tracks[0]; >+ stream = streams[0]; >+ stream.addTrack(track); >+ pc.addStream(stream); >+ return pc.createOffer(); >+ })) >+ .then(t.step_func(offer => { >+ return pc.setLocalDescription(offer); >+ })) >+ .then(t.step_func(() => { >+ return pc.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', track.id); >+ let streamStats = findStatsByTypeAndId(report, 'stream', stream.id); >+ assert_true(trackStats != null && streamStats != null, >+ 'Has stats for track and stream'); >+ assert_array_equals(streamStats.trackIds, [ trackStats.id ], >+ 'streamStats.trackIds == [ trackStats.id ]'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, streamStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'Legacy addStream(): Media stream stats references track stats'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let sendingTrack; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ sendingTrack = tracks[0]; >+ caller.addTrack(sendingTrack); >+ return doSignalingHandshake(caller, callee); >+ })) >+ .then(t.step_func(() => { >+ return caller.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', sendingTrack.id); >+ assert_true(trackStats != null, 'Has stats for sending track'); >+ let outboundStats = findStatsByTypeAndMember(report, 'outbound-rtp', >+ 'trackId', trackStats.id); >+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, outboundStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'O/A exchange yields outbound RTP stream stats for sending track'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let receivingTrack; >+ callee.ontrack = trackEvent => { >+ assert_true(receivingTrack == undefined, 'ontrack has not fired before'); >+ receivingTrack = trackEvent.track; >+ }; >+ return getUserMediaTracksAndStreams(1) >+ .then(t.step_func(([tracks, streams]) => { >+ caller.addTrack(tracks[0]); >+ return doSignalingHandshake(caller, callee); >+ })) >+ .then(t.step_func(() => { >+ return callee.getStats(); >+ })) >+ .then(t.step_func(report => { >+ assert_true(receivingTrack != null, 'Has a receiving track'); >+ let trackStats = findStatsByTypeAndId(report, 'track', receivingTrack.id); >+ assert_true(trackStats != null, 'Has stats for receiving track'); >+ let inboundStats = findStatsByTypeAndMember(report, 'inbound-rtp', >+ 'trackId', trackStats.id); >+ assert_true(inboundStats != null, 'Has stats for outbound RTP stream'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, inboundStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'O/A exchange yields inbound RTP stream stats for receiving track'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let sendingTrack1; >+ let sendingTrack2; >+ let sender; >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ sendingTrack1 = tracks[0]; >+ sendingTrack2 = tracks[1]; >+ sender = caller.addTrack(sendingTrack1); >+ return sender.replaceTrack(sendingTrack2); >+ })) >+ .then(t.step_func(() => { >+ return caller.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', sendingTrack2.id); >+ assert_true(trackStats != null, 'Has stats for replaced track'); >+ validateRtcStats(report, trackStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() before offer: new track attachment stats present'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let sendingTrack1; >+ let sendingTrack2; >+ let sender; >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ sendingTrack1 = tracks[0]; >+ sendingTrack2 = tracks[1]; >+ sender = caller.addTrack(sendingTrack1); >+ return performOffer(caller, callee); >+ })) >+ .then(t.step_func(() => { >+ return sender.replaceTrack(sendingTrack2); >+ })) >+ .then(t.step_func(() => { >+ return caller.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', sendingTrack2.id); >+ assert_true(trackStats != null, 'Has stats for replaced track'); >+ let outboundStats = findStatsByTypeAndMember(report, 'outbound-rtp', >+ 'trackId', trackStats.id); >+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, outboundStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() after offer, before answer: new track attachment stats ' + >+ 'present'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let sendingTrack1; >+ let sendingTrack2; >+ let sender; >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ sendingTrack1 = tracks[0]; >+ sendingTrack2 = tracks[1]; >+ sender = caller.addTrack(sendingTrack1); >+ return doSignalingHandshake(caller, callee); >+ })) >+ .then(t.step_func(() => { >+ return sender.replaceTrack(sendingTrack2); >+ })) >+ .then(t.step_func(() => { >+ return caller.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', sendingTrack2.id); >+ assert_true(trackStats != null, 'Has stats for replaced track'); >+ let outboundStats = findStatsByTypeAndMember(report, 'outbound-rtp', >+ 'trackId', trackStats.id); >+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); >+ validateRtcStats(report, trackStats); >+ validateRtcStats(report, outboundStats); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack() after answer: new track attachment stats present'); >+ >+ async_test(t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let sendingTrack1; >+ let sendingTrack2; >+ let sender; >+ return getUserMediaTracksAndStreams(2) >+ .then(t.step_func(([tracks, streams]) => { >+ sendingTrack1 = tracks[0]; >+ sendingTrack2 = tracks[1]; >+ sender = caller.addTrack(sendingTrack1); >+ return doSignalingHandshake(caller, callee); >+ })) >+ .then(t.step_func(() => { >+ return sender.replaceTrack(sendingTrack2); >+ })) >+ .then(t.step_func(() => { >+ return caller.getStats(); >+ })) >+ .then(t.step_func(report => { >+ let trackStats = findStatsByTypeAndId(report, 'track', sendingTrack1.id); >+ assert_true(trackStats != null, 'Has stats for original track'); >+ assert_true(trackStats.objectDeleted); >+ let outboundStats = findStatsByTypeAndMember(report, 'outbound-rtp', >+ 'trackId', trackStats.id); >+ assert_true(outboundStats == null, >+ 'The outbound RTP stream should no longer reference the ' + >+ 'original attachment'); >+ t.done(); >+ })) >+ .catch(t.step_func(reason => { >+ assert_unreached(reason); >+ })); >+ }, 'replaceTrack(): original track attachment stats present after replacing'); >+ >+ promise_test(async t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(2); >+ let sender = caller.addTrack(tracks[0], streams[0]); >+ callee.addTrack(tracks[1], streams[1]); >+ exchangeIceCandidates(caller, callee); >+ await doSignalingHandshake(caller, callee); >+ await onIceConnectionStateCompleted(caller); >+ let receiver = caller.getReceivers()[0]; >+ >+ // Obtain inbound and outbound RTP stream stats on a full stats report. >+ let fullReport = await caller.getStats(); >+ let outboundTrackStats = findStatsByTypeAndId( >+ fullReport, 'track', sender.track.id); >+ let outboundStats = findStatsByTypeAndMember( >+ fullReport, 'outbound-rtp', 'trackId', outboundTrackStats.id); >+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); >+ let inboundTrackStats = findStatsByTypeAndId( >+ fullReport, 'track', receiver.track.id); >+ let inboundStats = findStatsByTypeAndMember( >+ fullReport, 'inbound-rtp', 'trackId', inboundTrackStats.id); >+ assert_true(inboundStats != null, 'Has stats for inbound RTP stream'); >+ >+ // Perform stats selection algorithm with sender selector. The result should >+ // contain the outbound-rtp but not the inbound-rtp. >+ let senderReport = await sender.getStats(); >+ assert_true(senderReport.has(outboundStats.id)); >+ assert_false(senderReport.has(inboundStats.id)); >+ >+ // Validate the stats graph, ensuring all stats objects are reachable and >+ // valid from the outbound-rtp stats. >+ validateStatsGraph(senderReport, senderReport.get(outboundStats.id)); >+ // Ensure that the stats graph contains some expected dictionaries. >+ assert_equals(findStatsOfType(senderReport, 'track').length, 1, >+ 'senderReport should contain track stats'); >+ assert_equals(findStatsOfType(senderReport, 'transport').length, 1, >+ 'senderReport should contain transport stats'); >+ assert_equals(findStatsOfType(senderReport, 'candidate-pair').length, 1, >+ 'senderReport should contain candidate-pair stats'); >+ assert_equals(findStatsOfType(senderReport, 'local-candidate').length, 1, >+ 'senderReport should contain local-candidate stats'); >+ assert_equals(findStatsOfType(senderReport, 'remote-candidate').length, 1, >+ 'senderReport should contain remote-candidate stats'); >+ }, 'RTCRtpSender.getStats() contains only outbound-rtp and related stats'); >+ >+ promise_test(async t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(2); >+ let sender = caller.addTrack(tracks[0], streams[0]); >+ callee.addTrack(tracks[1], streams[1]); >+ exchangeIceCandidates(caller, callee); >+ await doSignalingHandshake(caller, callee); >+ await onIceConnectionStateCompleted(caller); >+ let receiver = caller.getReceivers()[0]; >+ >+ // Obtain inbound and outbound RTP stream stats on a full stats report. >+ let fullReport = await caller.getStats(); >+ let outboundTrackStats = findStatsByTypeAndId( >+ fullReport, 'track', sender.track.id); >+ let outboundStats = findStatsByTypeAndMember( >+ fullReport, 'outbound-rtp', 'trackId', outboundTrackStats.id); >+ assert_true(outboundStats != null, 'Has stats for outbound RTP stream'); >+ let inboundTrackStats = findStatsByTypeAndId( >+ fullReport, 'track', receiver.track.id); >+ let inboundStats = findStatsByTypeAndMember( >+ fullReport, 'inbound-rtp', 'trackId', inboundTrackStats.id); >+ assert_true(inboundStats != null, 'Has stats for inbound RTP stream'); >+ >+ // Perform stats selection algorithm with receiver selector. The result >+ // should contain the inbound-rtp but not the outbound-rtp. >+ let receiverReport = await receiver.getStats(); >+ assert_true(receiverReport.has(inboundStats.id)); >+ assert_false(receiverReport.has(outboundStats.id)); >+ >+ // Validate the stats graph, ensuring all stats objects are reachable and >+ // valid from the outbound-rtp stats. >+ validateStatsGraph(receiverReport, receiverReport.get(inboundStats.id)); >+ // Ensure that the stats graph contains some expected dictionaries. >+ assert_equals(findStatsOfType(receiverReport, 'track').length, 1, >+ 'receiverReport should contain track stats'); >+ assert_equals(findStatsOfType(receiverReport, 'transport').length, 1, >+ 'receiverReport should contain transport stats'); >+ assert_equals(findStatsOfType(receiverReport, 'candidate-pair').length, 1, >+ 'receiverReport should contain candidate-pair stats'); >+ assert_equals(findStatsOfType(receiverReport, 'local-candidate').length, 1, >+ 'receiverReport should contain local-candidate stats'); >+ assert_equals(findStatsOfType(receiverReport, 'remote-candidate').length, 1, >+ 'receiverReport should contain remote-candidate stats'); >+ }, 'RTCRtpReceiver.getStats() contains only inbound-rtp and related stats'); >+ >+ promise_test(async t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(2); >+ let sender = caller.addTrack(tracks[0], streams[0]); >+ callee.addTrack(tracks[1], streams[1]); >+ exchangeIceCandidates(caller, callee); >+ await doSignalingHandshake(caller, callee); >+ await onIceConnectionStateCompleted(caller); >+ >+ let senderReport = await sender.getStats(); >+ let trackReport = await caller.getStats(sender.track); >+ >+ // Verify the same stats objects are returned but don't compare each >+ // individual metric because timestamps and counters could have gone up >+ // between the two getStats() calls. >+ senderReport.forEach(senderReportStat => { >+ assert_true(trackReport.has(senderReportStat.id)); >+ }); >+ trackReport.forEach(trackReportStat => { >+ assert_true(senderReport.has(trackReportStat.id)); >+ }); >+ }, 'RTCPeerConnection.getStats(sendingTrack) is the same as ' + >+ 'RTCRtpSender.getStats()'); >+ >+ promise_test(async t => { >+ const caller = new RTCPeerConnection(); >+ const callee = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(2); >+ let sender = caller.addTrack(tracks[0], streams[0]); >+ callee.addTrack(tracks[1], streams[1]); >+ exchangeIceCandidates(caller, callee); >+ await doSignalingHandshake(caller, callee); >+ await onIceConnectionStateCompleted(caller); >+ let receiver = caller.getReceivers()[0]; >+ >+ let receiverReport = await receiver.getStats(); >+ let trackReport = await caller.getStats(receiver.track); >+ >+ // Verify the same stats objects are returned but don't compare each >+ // individual metric because timestamps and counters could have gone up >+ // between the two getStats() calls. >+ receiverReport.forEach(receiverReportStat => { >+ assert_true(trackReport.has(receiverReportStat.id)); >+ }); >+ trackReport.forEach(trackReportStat => { >+ assert_true(receiverReport.has(trackReportStat.id)); >+ }); >+ }, 'RTCPeerConnection.getStats(receivingTrack) is the same as ' + >+ 'RTCRtpReceiver.getStats()'); >+ >+ promise_test(async t => { >+ const pc = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(1); >+ await promise_rejects(t, 'InvalidAccessError', pc.getStats(tracks[0])); >+ }, 'RTCPeerConnection.getStats(track) throws InvalidAccessError when there ' + >+ 'are zero senders or receivers for the track'); >+ >+ promise_test(async t => { >+ const pc = new RTCPeerConnection(); >+ let [tracks, streams] = await getUserMediaTracksAndStreams(2); >+ let sender1 = pc.addTrack(tracks[0]); >+ let sender2 = pc.addTrack(tracks[1]); >+ await sender2.replaceTrack(sender1.track); >+ await promise_rejects(t, 'InvalidAccessError', pc.getStats(sender1.track)); >+ }, 'RTCPeerConnection.getStats(track) throws InvalidAccessError when there ' + >+ 'are multiple senders for the track'); >+ >+ // Helpers. >+ >+ function findStatsByTypeAndId(report, type, identifier) { >+ return findStats(report, stats => { >+ return stats.type == type && stats[type + 'Identifier'] == identifier; >+ }); >+ } >+ >+ function findStatsByTypeAndMember(report, type, member, value) { >+ return findStats(report, stats => { >+ return stats.type == type && stats[member] == value; >+ }); >+ } >+ >+ function findStats(report, findFunc) { >+ for (let it = report.values(), n = it.next(); !n.done; n = it.next()) { >+ if (findFunc(n.value)) >+ return n.value; >+ } >+ return null; >+ } >+ >+ function findStatsOfType(report, type) { >+ let stats = []; >+ for (let it = report.values(), n = it.next(); !n.done; n = it.next()) { >+ if (n.value.type == type) >+ stats.push(n.value); >+ } >+ return stats; >+ } >+ >+ // Returns a promise that is resolved when pc.iceConnectionState reaches the >+ // 'connected' or 'completed' state. This is when transport stats can be >+ // expected to have its selectedCandidatePairId defined. >+ async function onIceConnectionStateCompleted(pc) { >+ if (pc.iceConnectionState == 'connected' || >+ pc.iceConnectionState == 'completed') { >+ return Promise.resolve(); >+ } >+ let resolver = new Resolver(); >+ pc.oniceconnectionstatechange = e => { >+ if (pc.iceConnectionState == 'connected' || >+ pc.iceConnectionState == 'completed') { >+ resolver.resolve(); >+ } >+ }; >+ return resolver.promise; >+ } >+ >+ // Explores the stats graph starting from |stat|, validating each stat >+ // (validateRtcStats) and asserting that all stats of the report were visited. >+ function validateStatsGraph(report, stat) { >+ let visitedIds = new Set(); >+ validateStatsGraphRecursively(report, stat.id, visitedIds); >+ assert_equals(visitedIds.size, report.size, >+ 'Entire stats graph should have been explored.') >+ } >+ >+ function validateStatsGraphRecursively(report, currentId, visitedIds) { >+ if (visitedIds.has(currentId)) >+ return; >+ visitedIds.add(currentId); >+ assert_true(report.has(currentId), 'Broken reference.'); >+ let stat = report.get(currentId); >+ validateRtcStats(report, stat); >+ for (let member in stat) { >+ if (member.endsWith('Id')) { >+ validateStatsGraphRecursively(report, stat[member], visitedIds); >+ } else if (member.endsWith('Ids')) { >+ let ids = stat[member]; >+ for (let i = 0; i < ids.length; ++i) { >+ validateStatsGraphRecursively(report, ids[i], visitedIds); >+ } >+ } >+ } >+ } >+ >+ async function async_assert_throws(exceptionName, promise, description) { >+ try { >+ await promise; >+ } catch (e) { >+ assert_equals(e.name, exceptionName); >+ return; >+ } >+ assert_unreached('No exception was thrown.'); >+ } >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html >index de1e143a6ad3eb0120950807a418e71f1e64978b..7ddc7e822f30e7ffcf7a4e851e33e4e38a8d294e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getContributingSources.https.html >@@ -38,7 +38,7 @@ > possibly encode, and 127 represents silence. > */ > >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html >index f36c85967bba33cbe45fbd099f3bee8492b8a440..4da0b0ac6235cbf1dff2237660ead5794fde1db1 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html >@@ -44,7 +44,7 @@ > added. > */ > >- promise_test(async () => { >+ promise_test(async t => { > const caller = new RTCPeerConnection(); > const callee = new RTCPeerConnection(); > const { receiver } = caller.addTransceiver('audio'); >@@ -55,7 +55,7 @@ > assert_stats_report_has_stats(statsReport, ['inbound-rtp']); > }, 'receiver.getStats() via addTransceiver should return stats report containing inbound-rtp stats'); > >- promise_test(async () => { >+ promise_test(async t => { > const caller = new RTCPeerConnection(); > const callee = new RTCPeerConnection(); > const stream = await navigator.mediaDevices.getUserMedia({audio:true}); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html >index 3494a911c874bcac64f0991b3b608c60a70f7a37..236ec8b630ea7a069f452b6c128bc5d4c23ee540 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html >@@ -25,7 +25,7 @@ > }; > */ > >- promise_test(() => { >+ promise_test(t => { > const pc1 = new RTCPeerConnection(); > const pc2 = new RTCPeerConnection(); > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html >index 5342625ea0ccf2aa9b9437666c6d61f3c7b21358..a20304d6300d5ebd497a7ec83ba9ade1d8462ba0 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html >@@ -39,7 +39,7 @@ > objects added. > */ > >- promise_test(async () => { >+ promise_test(async t => { > const caller = new RTCPeerConnection(); > const callee = new RTCPeerConnection(); > const { sender } = caller.addTransceiver('audio'); >@@ -50,7 +50,7 @@ > assert_stats_report_has_stats(statsReport, ['outbound-rtp']); > }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats'); > >- promise_test(async () => { >+ promise_test(async t => { > const caller = new RTCPeerConnection(); > const callee = new RTCPeerConnection(); > const stream = await navigator.mediaDevices.getUserMedia({audio:true}); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..00e3de0928aedc844f6733c4dd6c4677d7a35568 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize-expected.txt >@@ -0,0 +1,7 @@ >+ >+FAIL Determine the local side send limitation (canSendSize) by offering a max-message-size of 0 assert_equals: expected (object) null but got (undefined) undefined >+FAIL Remote offer SDP missing max-message-size attribute assert_equals: expected (object) null but got (undefined) undefined >+FAIL max-message-size with a (non-zero) value provided by the remote peer assert_equals: expected (object) null but got (undefined) undefined >+FAIL Renegotiate max-message-size with a (non-zero) value provided by the remote peer assert_equals: expected (object) null but got (undefined) undefined >+FAIL max-message-size with a (non-zero) value larger than canSendSize provided by the remote peer assert_equals: expected (object) null but got (undefined) undefined >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize.html >new file mode 100644 >index 0000000000000000000000000000000000000000..d7f836292ebe4cdd162086b33072c0d8270691e9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize.html >@@ -0,0 +1,181 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCSctpTransport.prototype.maxMessageSize</title> >+<link rel="help" href="https://w3c.github.io/webrtc-pc/#rtcsctptransport-interface"> >+<script src=/resources/testharness.js></script> >+<script src=/resources/testharnessreport.js></script> >+<script src="RTCPeerConnection-helper.js"></script> >+<script> >+'use strict'; >+ >+// This test has an assert_unreached() that requires that the variable >+// canSendSize (initiated below) is greater than 2, if non-zero. The reason >+// is that we need two non-zero values that are less that that value for >+// testing with predictable results. This is a bit unfortunate but shouldn't >+// have any practical impact. >+ >+// Helper class to read SDP attributes and generate SDPs with modified attribute values >+class SDPAttributeHelper { >+ constructor(attrName, valueRegExpStr) { >+ this.attrName = attrName; >+ this.re = new RegExp(`^a=${attrName}:(${valueRegExpStr})\\r\\n`, 'm'); >+ } >+ >+ getValue(sdp) { >+ const matches = sdp.match(this.re); >+ return matches ? matches[1] : null; >+ } >+ >+ sdpWithValue(sdp, value) { >+ const matches = sdp.match(this.re); >+ const sdpParts = sdp.split(matches[0]); >+ const attributeLine = arguments.length > 1 ? `a=${this.attrName}:${value}\r\n` : ''; >+ return `${sdpParts[0]}${attributeLine}${sdpParts[1]}`; >+ } >+ >+ sdpWithoutAttribute(sdp) { >+ return this.sdpWithValue(sdp); >+ } >+} >+ >+const mmsAttributeHelper = new SDPAttributeHelper('max-message-size', '\\d+'); >+let canSendSize; >+const remoteValue1 = 1; >+const remoteValue2 = 2; >+ >+promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ assert_equals(pc.sctp, null); >+ let maxMessageSize; >+ >+ return generateOffer({ pc, data: true }) >+ .then((offer) => { >+ assert_not_equals(mmsAttributeHelper.getValue(offer.sdp), null, >+ 'SDP should have max-message-size attribute'); >+ >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithValue(offer.sdp, 0) }; >+ return pc.setRemoteDescription(offer); >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ canSendSize = pc.sctp.maxMessageSize == Number.POSITIVE_INFINITY ? 0 : pc.sctp.maxMessageSize; >+ if (canSendSize != 0 && canSendSize < remoteValue2) { >+ assert_unreached('This test needs two values that are less than canSendSize (unless it is zero)'); >+ } >+ }); >+}, 'Determine the local side send limitation (canSendSize) by offering a max-message-size of 0'); >+ >+promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ assert_equals(pc.sctp, null); >+ >+ return generateOffer({ pc, data: true }) >+ .then((offer) => { >+ assert_not_equals(mmsAttributeHelper.getValue(offer.sdp), null, >+ 'SDP should have max-message-size attribute'); >+ >+ // Remove the max-message-size SDP attribute >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithoutAttribute(offer.sdp) }; >+ return pc.setRemoteDescription(offer) >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ // Test outcome depends on canSendSize value >+ if (canSendSize) { >+ assert_equals(pc.sctp.maxMessageSize, Math.min(65536, canSendSize), >+ 'Missing SDP attribute and a non-zero canSendSize should give an maxMessageSize of min(65536, canSendSize)'); >+ } else { >+ assert_equals(pc.sctp.maxMessageSize, 65536, >+ 'Missing SDP attribute and a canSendSize of 0 should give an maxMessageSize of 65536'); >+ } >+ }); >+}, 'Remote offer SDP missing max-message-size attribute'); >+ >+promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ assert_equals(pc.sctp, null); >+ >+ return generateOffer({ pc, data: true }) >+ .then((offer) => { >+ assert_not_equals(mmsAttributeHelper.getValue(offer.sdp), null, >+ 'SDP should have max-message-size attribute'); >+ >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithValue(offer.sdp, remoteValue1) }; >+ return pc.setRemoteDescription(offer); >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ assert_equals(pc.sctp.maxMessageSize, remoteValue1, >+ 'maxMessageSize should be the value provided by the remote peer (as long as it is less than canSendSize)'); >+ }); >+}, 'max-message-size with a (non-zero) value provided by the remote peer'); >+ >+promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ assert_equals(pc.sctp, null); >+ >+ return generateOffer({ pc, data: true }) >+ .then((offer) => { >+ assert_not_equals(mmsAttributeHelper.getValue(offer.sdp), null, >+ 'SDP should have max-message-size attribute'); >+ >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithValue(offer.sdp, remoteValue1) }; >+ return pc.setRemoteDescription(offer) >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ assert_equals(pc.sctp.maxMessageSize, remoteValue1, >+ 'maxMessageSize should be the value provided by the remote peer (as long as it is less than canSendSize)'); >+ }) >+ .then(() => pc.createOffer()) // Start new O/A exchange that updates max-message-size >+ .then((offer) => { >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithValue(offer.sdp, remoteValue2)}; >+ return pc.setRemoteDescription(offer) >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ assert_equals(pc.sctp.maxMessageSize, remoteValue2, >+ 'maxMessageSize should be the new value provided by the remote peer (as long as it is less than canSendSize)'); >+ }) >+ ; >+}, 'Renegotiate max-message-size with a (non-zero) value provided by the remote peer'); >+ >+promise_test(t => { >+ const pc = new RTCPeerConnection(); >+ assert_equals(pc.sctp, null); >+ const largerThanCanSendSize = canSendSize + 1; >+ >+ return generateOffer({ pc, data: true }) >+ .then((offer) => { >+ assert_not_equals(mmsAttributeHelper.getValue(offer.sdp), null, >+ 'SDP should have max-message-size attribute'); >+ >+ offer = { type: 'offer', sdp: mmsAttributeHelper.sdpWithValue(offer.sdp, largerThanCanSendSize) }; >+ return pc.setRemoteDescription(offer) >+ }) >+ .then(() => pc.createAnswer()) >+ .then((answer) => pc.setLocalDescription(answer)) >+ .then(() => { >+ assert_not_equals(pc.sctp, null); >+ // Test outcome depends on canSendSize value >+ if (canSendSize) { >+ assert_equals(pc.sctp.maxMessageSize, canSendSize, >+ 'A remote value larger than a non-zero canSendSize should limit maxMessageSize to canSendSize'); >+ } else { >+ assert_equals(pc.sctp.maxMessageSize, 65536, >+ 'A canSendSize of zero should let the remote value set maxMessageSize'); >+ } >+ }); >+}, 'max-message-size with a (non-zero) value larger than canSendSize provided by the remote peer'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.js b/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.js >deleted file mode 100644 >index bd35d0fbbe93115769c9a43dd8acb1f634c0b7a0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.js >+++ /dev/null >@@ -1,70 +0,0 @@ >-'use strict'; >- >-/* >- In web-platform-test, the following domains are required to be set up locally: >- 127.0.0.1 web-platform.test >- 127.0.0.1 www.web-platform.test >- 127.0.0.1 www1.web-platform.test >- 127.0.0.1 www2.web-platform.test >- 127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test >- 127.0.0.1 xn--lve-6lad.web-platform.test >- 0.0.0.0 nonexistent-origin.web-platform.test >- */ >- >-/* >- dictionary RTCIdentityProviderDetails { >- required DOMString domain; >- DOMString protocol = "default"; >- }; >- */ >- >-// Parse a base64 JSON encoded string returned from getIdentityAssertion(). >-// This is also the string that is set in the a=identity line. >-// Returns a { idp, assertion } where idp is of type RTCIdentityProviderDetails >-// and assertion is the deserialized JSON that was returned by the >-// IdP proxy's generateAssertion() function. >-function parseAssertionResult(assertionResultStr) { >- const assertionResult = JSON.parse(atob(assertionResultStr)); >- >- const { idp } = assertionResult; >- const assertion = JSON.parse(assertionResult.assertion); >- >- return { idp, assertion }; >-} >- >-// Return two distinct IdP domains that are different from current domain >-function getIdpDomains() { >- if(window.location.hostname === 'www1.web-platform.test') { >- return ['www.web-platform.test', 'www2.web-platform.test']; >- } else if(window.location.hostname === 'www2.web-platform.test') { >- return ['www.web-platform.test', 'www1.web-platform.test']; >- } else { >- return ['www1.web-platform.test', 'www2.web-platform.test']; >- } >-} >- >-function assert_rtcerror_rejection(errorDetail, promise, desc) { >- return promise.then( >- res => { >- assert_unreached(`Expect promise to be rejected with RTCError, but instead got ${res}`); >- }, err => { >- assert_true(err instanceof RTCError, >- 'Expect error object to be instance of RTCError'); >- >- assert_equals(err.errorDetail, errorDetail, >- `Expect RTCError object have errorDetail set to ${errorDetail}`); >- >- return err; >- }); >-} >- >-// construct a host string consist of domain and optionally port >-// If the default HTTP/HTTPS port is used, window.location.port returns >-// empty string. >-function hostString(domain, port) { >- if(port === '') { >- return domain; >- } else { >- return `${domain}:${port}`; >- } >-} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.sub.js b/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.sub.js >new file mode 100644 >index 0000000000000000000000000000000000000000..90363662f742fbf1d31634030d2b470e08fe1421 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.sub.js >@@ -0,0 +1,70 @@ >+'use strict'; >+ >+/* >+ In web-platform-test, a number of domains are required to be set up locally. >+ The list is available at docs/_writing-tests/server-features.md. The >+ appropriate hosts file entries can be generated with the WPT CLI via the >+ following command: `wpt make-hosts-file`. >+ */ >+ >+/* >+ dictionary RTCIdentityProviderDetails { >+ required DOMString domain; >+ DOMString protocol = "default"; >+ }; >+ */ >+ >+// Parse a base64 JSON encoded string returned from getIdentityAssertion(). >+// This is also the string that is set in the a=identity line. >+// Returns a { idp, assertion } where idp is of type RTCIdentityProviderDetails >+// and assertion is the deserialized JSON that was returned by the >+// IdP proxy's generateAssertion() function. >+function parseAssertionResult(assertionResultStr) { >+ const assertionResult = JSON.parse(atob(assertionResultStr)); >+ >+ const { idp } = assertionResult; >+ const assertion = JSON.parse(assertionResult.assertion); >+ >+ return { idp, assertion }; >+} >+ >+// Return two distinct IdP domains that are different from current domain >+function getIdpDomains() { >+ const domainA = '{{domains[www]}}'; >+ const domainB = '{{domains[www1]}}'; >+ const domainC = '{{domains[www2]}}'; >+ >+ if(window.location.hostname === domainA) { >+ return [domainB, domainC]; >+ } else if(window.location.hostname === domainB) { >+ return [domainA, domainC]; >+ } else { >+ return [domainA, domainB]; >+ } >+} >+ >+function assert_rtcerror_rejection(errorDetail, promise, desc) { >+ return promise.then( >+ res => { >+ assert_unreached(`Expect promise to be rejected with RTCError, but instead got ${res}`); >+ }, err => { >+ assert_true(err instanceof RTCError, >+ 'Expect error object to be instance of RTCError'); >+ >+ assert_equals(err.errorDetail, errorDetail, >+ `Expect RTCError object have errorDetail set to ${errorDetail}`); >+ >+ return err; >+ }); >+} >+ >+// construct a host string consist of domain and optionally port >+// If the default HTTP/HTTPS port is used, window.location.port returns >+// empty string. >+function hostString(domain, port) { >+ if(port === '') { >+ return domain; >+ } else { >+ return `${domain}:${port}`; >+ } >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/README.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/README.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..062db8540f43278b7a49a94c3fa25647f038ef8f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/README.txt >@@ -0,0 +1,21 @@ >+This directory contains files that test for behavior relevant to webrtc, >+but which is specified in protocol specifications from the IETF, not in >+API recommendations from the W3C. >+ >+The main specifications are given in the following internet-drafts: >+ >+- draft-ietf-rtcweb-overview >+- draft-ietf-rtcweb-transports >+- draft-ietf-rtcweb-security-arch >+- draft-ietf-rtcweb-security >+- draft-ietf-rtcweb-rtp-usage >+- draft-ietf-rtcweb-jsep >+- draft-ietf-rtcweb-ip-handling >+- draft-ietf-rtcweb-fec >+- draft-ietf-rtcweb-data-protocol >+- draft-ietf-rtcweb-data-channel >+ >+- RFC 7742, "WebRTC Video Processing and Codec Requirements" >+- RFC 7874, "WebRTC Audio Codec and Processing Requirements" >+ >+An overview of the dependencies involved is in draft-jennings-rtcweb-deps >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..019dbb2fe3f83a2294a85633cad553e4ee0f88c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https-expected.txt >@@ -0,0 +1,5 @@ >+ >+FAIL H.264 and VP8 should be supported in initial offer assert_true: expected true got false >+FAIL H.264 and VP8 should be negotiated after handshake assert_true: expected true got false >+FAIL All H.264 codecs MUST include profile-level-id promise_test: Unhandled rejection with value: object "TypeError: undefined is not an object (evaluating 'fmtp.split')" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https.html b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..547856f2a271b5c349b529ec7f1fe1acb5a48ef0 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https.html >@@ -0,0 +1,90 @@ >+<!doctype html> >+<meta charset=utf-8> >+<title>RTCPeerConnection.prototype.createOffer</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="../RTCPeerConnection-helper.js"></script> >+<script> >+'use strict'; >+ >+// Tests for conformance to RFC 7742, >+// "WebRTC Video Processing and Codec Requirements" >+// The document was formerly known as draft-ietf-rtcweb-video-codecs. >+// >+// This tests that the browser is a WebRTC Browser as defined there. >+ >+// TODO: Section 3.2: screen capture video MUST be prepared >+// to handle resolution changes. >+ >+// TODO: Section 4: MUST support generating CVO (orientation) >+ >+// Section 5: Browsers MUST implement VP8 and H.264 Constrained Baseline >+promise_test(async t => { >+ const pc = new RTCPeerConnection(); >+ const offer = await pc.createOffer({offerToReceiveVideo: true}); >+ let video_section_found = false; >+ for (let section of offer.sdp.split(/\r\nm=/)) { >+ if (section.search('video') != 0) { >+ continue; >+ } >+ video_section_found = true; >+ // RTPMAP lines have the format a=rtpmap:<pt> <codec>/<clock rate> >+ let rtpmap_regex = /\r\na=rtpmap:(\d+) (\S+)\/\d+\r\n/g; >+ let match = rtpmap_regex.exec(offer.sdp); >+ let payload_type_map = new Array(); >+ while (match) { >+ payload_type_map[match[1]] = match[2]; >+ match = rtpmap_regex.exec(offer.sdp); >+ } >+ assert_true(payload_type_map.indexOf('VP8') > -1, >+ 'VP8 is supported'); >+ assert_true(payload_type_map.indexOf('H264') > -1, >+ 'H.264 is supported'); >+ // TODO: Verify that one of the H.264 PTs supports constrained baseline >+ } >+ assert_true(video_section_found); >+}, 'H.264 and VP8 should be supported in initial offer'); >+ >+async function negotiateParameters() { >+ const pc1 = new RTCPeerConnection(); >+ const pc2 = new RTCPeerConnection(); >+ let [track, streams] = await getTrackFromUserMedia('video'); >+ const sender = pc1.addTrack(track); >+ await doSignalingHandshake(pc1, pc2); >+ return sender.getParameters(); >+} >+ >+function parseFmtp(fmtp) { >+ const params = fmtp.split(';'); >+ return params.map(param => param.split('=')); >+} >+promise_test(async t => { >+ const params = await negotiateParameters(); >+ assert_true(!!params.codecs.find(codec => codec.mimeType === 'video/H264')); >+ assert_true(!!params.codecs.find(codec => codec.mimeType === 'video/VP8')); >+}, 'H.264 and VP8 should be negotiated after handshake'); >+ >+// TODO: Section 6: Recipients MUST be able to decode 320x240@20 fps >+// TODO: Section 6.1: VP8 MUST support RFC 7741 payload formats >+// TODO: Section 6.1: VP8 MUST respect max-fr/max-fs >+// TODO: Section 6.1: VP8 MUST encode and decode square pixels >+// TODO: Section 6.2: H.264 MUST support RFC 6184 payload formats >+// TODO: Section 6.2: MUST support Constrained Baseline level 1.2 >+// TODO: Section 6.2: SHOULD support Constrained High level 1.3 >+// TODO: Section 6.2: MUST support packetization mode 1. >+promise_test(async t => { >+ const params = await negotiateParameters(); >+ const h264 = params.codecs.filter(codec => codec.mimeType === 'video/H264'); >+ h264.map(codec => { >+ const codec_params = parseFmtp(codec.sdpFmtpLine); >+ assert_true(!!codec_params.find(x => x[0] === 'profile-level-id')); >+ }) >+}, 'All H.264 codecs MUST include profile-level-id'); >+ >+// TODO: Section 6.2: SHOULD interpret max-mbps, max-smbps, max-fs et al >+// TODO: Section 6.2: MUST NOT include sprop-parameter-sets >+// TODO: Section 6.2: MUST support SEI "filler payload" >+// TODO: Section 6.2: MUST support SEI "full frame freeze" >+// TODO: Section 6.2: MUST be prepared to receive User Data messages >+// TODO: Section 6.2: MUST encode and decode square pixels unless signaled >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..ff0245b39dad45509f09de41ddc8ed48cc73ffc5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/README.txt >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/protocol/video-codecs.https.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/README.md b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/README.md >new file mode 100644 >index 0000000000000000000000000000000000000000..68bc284fdfa722567c136e6001aaa476689418a4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/README.md >@@ -0,0 +1,14 @@ >+WebRTC Tools >+============ >+ >+This directory contains a simple Node.js project to aid the development of >+WebRTC tests. >+ >+## Lint >+ >+```bash >+npm run lint >+``` >+ >+Does basic linting of the JavaScript code. Mainly for catching usage of >+undefined variables. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package-lock.json b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package-lock.json >new file mode 100644 >index 0000000000000000000000000000000000000000..79e603949cf80053c21ec7d8eb4cb974cf00b3f4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package-lock.json >@@ -0,0 +1,1213 @@ >+{ >+ "name": "webrtc-testing-tools", >+ "version": "1.0.0", >+ "lockfileVersion": 1, >+ "requires": true, >+ "dependencies": { >+ "acorn": { >+ "version": "5.2.1", >+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", >+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", >+ "dev": true >+ }, >+ "acorn-jsx": { >+ "version": "3.0.1", >+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", >+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", >+ "dev": true, >+ "requires": { >+ "acorn": "3.3.0" >+ }, >+ "dependencies": { >+ "acorn": { >+ "version": "3.3.0", >+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", >+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", >+ "dev": true >+ } >+ } >+ }, >+ "ajv": { >+ "version": "5.3.0", >+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", >+ "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", >+ "dev": true, >+ "requires": { >+ "co": "4.6.0", >+ "fast-deep-equal": "1.0.0", >+ "fast-json-stable-stringify": "2.0.0", >+ "json-schema-traverse": "0.3.1" >+ } >+ }, >+ "ajv-keywords": { >+ "version": "2.1.1", >+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", >+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", >+ "dev": true >+ }, >+ "ansi-escapes": { >+ "version": "3.0.0", >+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", >+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", >+ "dev": true >+ }, >+ "ansi-regex": { >+ "version": "2.1.1", >+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", >+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", >+ "dev": true >+ }, >+ "ansi-styles": { >+ "version": "2.2.1", >+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", >+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", >+ "dev": true >+ }, >+ "argparse": { >+ "version": "1.0.9", >+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", >+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", >+ "dev": true, >+ "requires": { >+ "sprintf-js": "1.0.3" >+ } >+ }, >+ "array-union": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", >+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", >+ "dev": true, >+ "requires": { >+ "array-uniq": "1.0.3" >+ } >+ }, >+ "array-uniq": { >+ "version": "1.0.3", >+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", >+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", >+ "dev": true >+ }, >+ "arrify": { >+ "version": "1.0.1", >+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", >+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", >+ "dev": true >+ }, >+ "babel-code-frame": { >+ "version": "6.26.0", >+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", >+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", >+ "dev": true, >+ "requires": { >+ "chalk": "1.1.3", >+ "esutils": "2.0.2", >+ "js-tokens": "3.0.2" >+ }, >+ "dependencies": { >+ "chalk": { >+ "version": "1.1.3", >+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", >+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", >+ "dev": true, >+ "requires": { >+ "ansi-styles": "2.2.1", >+ "escape-string-regexp": "1.0.5", >+ "has-ansi": "2.0.0", >+ "strip-ansi": "3.0.1", >+ "supports-color": "2.0.0" >+ } >+ }, >+ "strip-ansi": { >+ "version": "3.0.1", >+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", >+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", >+ "dev": true, >+ "requires": { >+ "ansi-regex": "2.1.1" >+ } >+ } >+ } >+ }, >+ "balanced-match": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", >+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", >+ "dev": true >+ }, >+ "brace-expansion": { >+ "version": "1.1.8", >+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", >+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", >+ "dev": true, >+ "requires": { >+ "balanced-match": "1.0.0", >+ "concat-map": "0.0.1" >+ } >+ }, >+ "caller-path": { >+ "version": "0.1.0", >+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", >+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", >+ "dev": true, >+ "requires": { >+ "callsites": "0.2.0" >+ } >+ }, >+ "callsites": { >+ "version": "0.2.0", >+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", >+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", >+ "dev": true >+ }, >+ "chalk": { >+ "version": "2.3.0", >+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", >+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", >+ "dev": true, >+ "requires": { >+ "ansi-styles": "3.2.0", >+ "escape-string-regexp": "1.0.5", >+ "supports-color": "4.5.0" >+ }, >+ "dependencies": { >+ "ansi-styles": { >+ "version": "3.2.0", >+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", >+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", >+ "dev": true, >+ "requires": { >+ "color-convert": "1.9.1" >+ } >+ }, >+ "supports-color": { >+ "version": "4.5.0", >+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", >+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", >+ "dev": true, >+ "requires": { >+ "has-flag": "2.0.0" >+ } >+ } >+ } >+ }, >+ "chardet": { >+ "version": "0.4.0", >+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz", >+ "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=", >+ "dev": true >+ }, >+ "circular-json": { >+ "version": "0.3.3", >+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", >+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", >+ "dev": true >+ }, >+ "cli-cursor": { >+ "version": "2.1.0", >+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", >+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", >+ "dev": true, >+ "requires": { >+ "restore-cursor": "2.0.0" >+ } >+ }, >+ "cli-width": { >+ "version": "2.2.0", >+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", >+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", >+ "dev": true >+ }, >+ "co": { >+ "version": "4.6.0", >+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", >+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", >+ "dev": true >+ }, >+ "color-convert": { >+ "version": "1.9.1", >+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", >+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", >+ "dev": true, >+ "requires": { >+ "color-name": "1.1.3" >+ } >+ }, >+ "color-name": { >+ "version": "1.1.3", >+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", >+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", >+ "dev": true >+ }, >+ "concat-map": { >+ "version": "0.0.1", >+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", >+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", >+ "dev": true >+ }, >+ "concat-stream": { >+ "version": "1.6.0", >+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", >+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", >+ "dev": true, >+ "requires": { >+ "inherits": "2.0.3", >+ "readable-stream": "2.3.3", >+ "typedarray": "0.0.6" >+ } >+ }, >+ "core-util-is": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", >+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", >+ "dev": true >+ }, >+ "cross-spawn": { >+ "version": "5.1.0", >+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", >+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", >+ "dev": true, >+ "requires": { >+ "lru-cache": "4.1.1", >+ "shebang-command": "1.2.0", >+ "which": "1.3.0" >+ } >+ }, >+ "debug": { >+ "version": "3.1.0", >+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", >+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", >+ "dev": true, >+ "requires": { >+ "ms": "2.0.0" >+ } >+ }, >+ "deep-is": { >+ "version": "0.1.3", >+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", >+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", >+ "dev": true >+ }, >+ "del": { >+ "version": "2.2.2", >+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", >+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", >+ "dev": true, >+ "requires": { >+ "globby": "5.0.0", >+ "is-path-cwd": "1.0.0", >+ "is-path-in-cwd": "1.0.0", >+ "object-assign": "4.1.1", >+ "pify": "2.3.0", >+ "pinkie-promise": "2.0.1", >+ "rimraf": "2.6.2" >+ } >+ }, >+ "doctrine": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", >+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", >+ "dev": true, >+ "requires": { >+ "esutils": "2.0.2", >+ "isarray": "1.0.0" >+ } >+ }, >+ "dom-serializer": { >+ "version": "0.1.0", >+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", >+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", >+ "dev": true, >+ "requires": { >+ "domelementtype": "1.1.3", >+ "entities": "1.1.1" >+ }, >+ "dependencies": { >+ "domelementtype": { >+ "version": "1.1.3", >+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", >+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", >+ "dev": true >+ } >+ } >+ }, >+ "domelementtype": { >+ "version": "1.3.0", >+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", >+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", >+ "dev": true >+ }, >+ "domhandler": { >+ "version": "2.4.1", >+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", >+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", >+ "dev": true, >+ "requires": { >+ "domelementtype": "1.3.0" >+ } >+ }, >+ "domutils": { >+ "version": "1.6.2", >+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", >+ "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", >+ "dev": true, >+ "requires": { >+ "dom-serializer": "0.1.0", >+ "domelementtype": "1.3.0" >+ } >+ }, >+ "entities": { >+ "version": "1.1.1", >+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", >+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", >+ "dev": true >+ }, >+ "escape-string-regexp": { >+ "version": "1.0.5", >+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", >+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", >+ "dev": true >+ }, >+ "eslint": { >+ "version": "4.11.0", >+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz", >+ "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==", >+ "dev": true, >+ "requires": { >+ "ajv": "5.3.0", >+ "babel-code-frame": "6.26.0", >+ "chalk": "2.3.0", >+ "concat-stream": "1.6.0", >+ "cross-spawn": "5.1.0", >+ "debug": "3.1.0", >+ "doctrine": "2.0.0", >+ "eslint-scope": "3.7.1", >+ "espree": "3.5.2", >+ "esquery": "1.0.0", >+ "estraverse": "4.2.0", >+ "esutils": "2.0.2", >+ "file-entry-cache": "2.0.0", >+ "functional-red-black-tree": "1.0.1", >+ "glob": "7.1.2", >+ "globals": "9.18.0", >+ "ignore": "3.3.7", >+ "imurmurhash": "0.1.4", >+ "inquirer": "3.3.0", >+ "is-resolvable": "1.0.0", >+ "js-yaml": "3.10.0", >+ "json-stable-stringify-without-jsonify": "1.0.1", >+ "levn": "0.3.0", >+ "lodash": "4.17.4", >+ "minimatch": "3.0.4", >+ "mkdirp": "0.5.1", >+ "natural-compare": "1.4.0", >+ "optionator": "0.8.2", >+ "path-is-inside": "1.0.2", >+ "pluralize": "7.0.0", >+ "progress": "2.0.0", >+ "require-uncached": "1.0.3", >+ "semver": "5.4.1", >+ "strip-ansi": "4.0.0", >+ "strip-json-comments": "2.0.1", >+ "table": "4.0.2", >+ "text-table": "0.2.0" >+ } >+ }, >+ "eslint-plugin-html": { >+ "version": "4.0.0", >+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.0.tgz", >+ "integrity": "sha512-xK/909qOTq5JVzuO2jo4a24nQcWhkOBz9dOIkORvB7RxC75a4b6B9wFpBXAl8WDhwJGFDj5gBDRN+/L3kK/ghw==", >+ "dev": true, >+ "requires": { >+ "htmlparser2": "3.9.2" >+ } >+ }, >+ "eslint-scope": { >+ "version": "3.7.1", >+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", >+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", >+ "dev": true, >+ "requires": { >+ "esrecurse": "4.2.0", >+ "estraverse": "4.2.0" >+ } >+ }, >+ "espree": { >+ "version": "3.5.2", >+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", >+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", >+ "dev": true, >+ "requires": { >+ "acorn": "5.2.1", >+ "acorn-jsx": "3.0.1" >+ } >+ }, >+ "esprima": { >+ "version": "4.0.0", >+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", >+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", >+ "dev": true >+ }, >+ "esquery": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", >+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", >+ "dev": true, >+ "requires": { >+ "estraverse": "4.2.0" >+ } >+ }, >+ "esrecurse": { >+ "version": "4.2.0", >+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", >+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", >+ "dev": true, >+ "requires": { >+ "estraverse": "4.2.0", >+ "object-assign": "4.1.1" >+ } >+ }, >+ "estraverse": { >+ "version": "4.2.0", >+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", >+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", >+ "dev": true >+ }, >+ "esutils": { >+ "version": "2.0.2", >+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", >+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", >+ "dev": true >+ }, >+ "external-editor": { >+ "version": "2.1.0", >+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", >+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", >+ "dev": true, >+ "requires": { >+ "chardet": "0.4.0", >+ "iconv-lite": "0.4.19", >+ "tmp": "0.0.33" >+ } >+ }, >+ "fast-deep-equal": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", >+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", >+ "dev": true >+ }, >+ "fast-json-stable-stringify": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", >+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", >+ "dev": true >+ }, >+ "fast-levenshtein": { >+ "version": "2.0.6", >+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", >+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", >+ "dev": true >+ }, >+ "figures": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", >+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", >+ "dev": true, >+ "requires": { >+ "escape-string-regexp": "1.0.5" >+ } >+ }, >+ "file-entry-cache": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", >+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", >+ "dev": true, >+ "requires": { >+ "flat-cache": "1.3.0", >+ "object-assign": "4.1.1" >+ } >+ }, >+ "flat-cache": { >+ "version": "1.3.0", >+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", >+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", >+ "dev": true, >+ "requires": { >+ "circular-json": "0.3.3", >+ "del": "2.2.2", >+ "graceful-fs": "4.1.11", >+ "write": "0.2.1" >+ } >+ }, >+ "fs.realpath": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", >+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", >+ "dev": true >+ }, >+ "functional-red-black-tree": { >+ "version": "1.0.1", >+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", >+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", >+ "dev": true >+ }, >+ "glob": { >+ "version": "7.1.2", >+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", >+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", >+ "dev": true, >+ "requires": { >+ "fs.realpath": "1.0.0", >+ "inflight": "1.0.6", >+ "inherits": "2.0.3", >+ "minimatch": "3.0.4", >+ "once": "1.4.0", >+ "path-is-absolute": "1.0.1" >+ } >+ }, >+ "globals": { >+ "version": "9.18.0", >+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", >+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", >+ "dev": true >+ }, >+ "globby": { >+ "version": "5.0.0", >+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", >+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", >+ "dev": true, >+ "requires": { >+ "array-union": "1.0.2", >+ "arrify": "1.0.1", >+ "glob": "7.1.2", >+ "object-assign": "4.1.1", >+ "pify": "2.3.0", >+ "pinkie-promise": "2.0.1" >+ } >+ }, >+ "graceful-fs": { >+ "version": "4.1.11", >+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", >+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", >+ "dev": true >+ }, >+ "has-ansi": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", >+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", >+ "dev": true, >+ "requires": { >+ "ansi-regex": "2.1.1" >+ } >+ }, >+ "has-flag": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", >+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", >+ "dev": true >+ }, >+ "htmlparser2": { >+ "version": "3.9.2", >+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", >+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", >+ "dev": true, >+ "requires": { >+ "domelementtype": "1.3.0", >+ "domhandler": "2.4.1", >+ "domutils": "1.6.2", >+ "entities": "1.1.1", >+ "inherits": "2.0.3", >+ "readable-stream": "2.3.3" >+ } >+ }, >+ "iconv-lite": { >+ "version": "0.4.19", >+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", >+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", >+ "dev": true >+ }, >+ "ignore": { >+ "version": "3.3.7", >+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", >+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", >+ "dev": true >+ }, >+ "imurmurhash": { >+ "version": "0.1.4", >+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", >+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", >+ "dev": true >+ }, >+ "inflight": { >+ "version": "1.0.6", >+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", >+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", >+ "dev": true, >+ "requires": { >+ "once": "1.4.0", >+ "wrappy": "1.0.2" >+ } >+ }, >+ "inherits": { >+ "version": "2.0.3", >+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", >+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", >+ "dev": true >+ }, >+ "inquirer": { >+ "version": "3.3.0", >+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", >+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", >+ "dev": true, >+ "requires": { >+ "ansi-escapes": "3.0.0", >+ "chalk": "2.3.0", >+ "cli-cursor": "2.1.0", >+ "cli-width": "2.2.0", >+ "external-editor": "2.1.0", >+ "figures": "2.0.0", >+ "lodash": "4.17.4", >+ "mute-stream": "0.0.7", >+ "run-async": "2.3.0", >+ "rx-lite": "4.0.8", >+ "rx-lite-aggregates": "4.0.8", >+ "string-width": "2.1.1", >+ "strip-ansi": "4.0.0", >+ "through": "2.3.8" >+ } >+ }, >+ "is-fullwidth-code-point": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", >+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", >+ "dev": true >+ }, >+ "is-path-cwd": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", >+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", >+ "dev": true >+ }, >+ "is-path-in-cwd": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", >+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", >+ "dev": true, >+ "requires": { >+ "is-path-inside": "1.0.0" >+ } >+ }, >+ "is-path-inside": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", >+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", >+ "dev": true, >+ "requires": { >+ "path-is-inside": "1.0.2" >+ } >+ }, >+ "is-promise": { >+ "version": "2.1.0", >+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", >+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", >+ "dev": true >+ }, >+ "is-resolvable": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", >+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", >+ "dev": true, >+ "requires": { >+ "tryit": "1.0.3" >+ } >+ }, >+ "isarray": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", >+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", >+ "dev": true >+ }, >+ "isexe": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", >+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", >+ "dev": true >+ }, >+ "js-tokens": { >+ "version": "3.0.2", >+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", >+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", >+ "dev": true >+ }, >+ "js-yaml": { >+ "version": "3.10.0", >+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", >+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", >+ "dev": true, >+ "requires": { >+ "argparse": "1.0.9", >+ "esprima": "4.0.0" >+ } >+ }, >+ "json-schema-traverse": { >+ "version": "0.3.1", >+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", >+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", >+ "dev": true >+ }, >+ "json-stable-stringify-without-jsonify": { >+ "version": "1.0.1", >+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", >+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", >+ "dev": true >+ }, >+ "levn": { >+ "version": "0.3.0", >+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", >+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", >+ "dev": true, >+ "requires": { >+ "prelude-ls": "1.1.2", >+ "type-check": "0.3.2" >+ } >+ }, >+ "lodash": { >+ "version": "4.17.4", >+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", >+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", >+ "dev": true >+ }, >+ "lru-cache": { >+ "version": "4.1.1", >+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", >+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", >+ "dev": true, >+ "requires": { >+ "pseudomap": "1.0.2", >+ "yallist": "2.1.2" >+ } >+ }, >+ "mimic-fn": { >+ "version": "1.1.0", >+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", >+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", >+ "dev": true >+ }, >+ "minimatch": { >+ "version": "3.0.4", >+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", >+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", >+ "dev": true, >+ "requires": { >+ "brace-expansion": "1.1.8" >+ } >+ }, >+ "minimist": { >+ "version": "0.0.8", >+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", >+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", >+ "dev": true >+ }, >+ "mkdirp": { >+ "version": "0.5.1", >+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", >+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", >+ "dev": true, >+ "requires": { >+ "minimist": "0.0.8" >+ } >+ }, >+ "ms": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", >+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", >+ "dev": true >+ }, >+ "mute-stream": { >+ "version": "0.0.7", >+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", >+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", >+ "dev": true >+ }, >+ "natural-compare": { >+ "version": "1.4.0", >+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", >+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", >+ "dev": true >+ }, >+ "object-assign": { >+ "version": "4.1.1", >+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", >+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", >+ "dev": true >+ }, >+ "once": { >+ "version": "1.4.0", >+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", >+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", >+ "dev": true, >+ "requires": { >+ "wrappy": "1.0.2" >+ } >+ }, >+ "onetime": { >+ "version": "2.0.1", >+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", >+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", >+ "dev": true, >+ "requires": { >+ "mimic-fn": "1.1.0" >+ } >+ }, >+ "optionator": { >+ "version": "0.8.2", >+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", >+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", >+ "dev": true, >+ "requires": { >+ "deep-is": "0.1.3", >+ "fast-levenshtein": "2.0.6", >+ "levn": "0.3.0", >+ "prelude-ls": "1.1.2", >+ "type-check": "0.3.2", >+ "wordwrap": "1.0.0" >+ } >+ }, >+ "os-tmpdir": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", >+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", >+ "dev": true >+ }, >+ "path-is-absolute": { >+ "version": "1.0.1", >+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", >+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", >+ "dev": true >+ }, >+ "path-is-inside": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", >+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", >+ "dev": true >+ }, >+ "pify": { >+ "version": "2.3.0", >+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", >+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", >+ "dev": true >+ }, >+ "pinkie": { >+ "version": "2.0.4", >+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", >+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", >+ "dev": true >+ }, >+ "pinkie-promise": { >+ "version": "2.0.1", >+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", >+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", >+ "dev": true, >+ "requires": { >+ "pinkie": "2.0.4" >+ } >+ }, >+ "pluralize": { >+ "version": "7.0.0", >+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", >+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", >+ "dev": true >+ }, >+ "prelude-ls": { >+ "version": "1.1.2", >+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", >+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", >+ "dev": true >+ }, >+ "process-nextick-args": { >+ "version": "1.0.7", >+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", >+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", >+ "dev": true >+ }, >+ "progress": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", >+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", >+ "dev": true >+ }, >+ "pseudomap": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", >+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", >+ "dev": true >+ }, >+ "readable-stream": { >+ "version": "2.3.3", >+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", >+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", >+ "dev": true, >+ "requires": { >+ "core-util-is": "1.0.2", >+ "inherits": "2.0.3", >+ "isarray": "1.0.0", >+ "process-nextick-args": "1.0.7", >+ "safe-buffer": "5.1.1", >+ "string_decoder": "1.0.3", >+ "util-deprecate": "1.0.2" >+ } >+ }, >+ "require-uncached": { >+ "version": "1.0.3", >+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", >+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", >+ "dev": true, >+ "requires": { >+ "caller-path": "0.1.0", >+ "resolve-from": "1.0.1" >+ } >+ }, >+ "resolve-from": { >+ "version": "1.0.1", >+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", >+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", >+ "dev": true >+ }, >+ "restore-cursor": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", >+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", >+ "dev": true, >+ "requires": { >+ "onetime": "2.0.1", >+ "signal-exit": "3.0.2" >+ } >+ }, >+ "rimraf": { >+ "version": "2.6.2", >+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", >+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", >+ "dev": true, >+ "requires": { >+ "glob": "7.1.2" >+ } >+ }, >+ "run-async": { >+ "version": "2.3.0", >+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", >+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", >+ "dev": true, >+ "requires": { >+ "is-promise": "2.1.0" >+ } >+ }, >+ "rx-lite": { >+ "version": "4.0.8", >+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", >+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", >+ "dev": true >+ }, >+ "rx-lite-aggregates": { >+ "version": "4.0.8", >+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", >+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", >+ "dev": true, >+ "requires": { >+ "rx-lite": "4.0.8" >+ } >+ }, >+ "safe-buffer": { >+ "version": "5.1.1", >+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", >+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", >+ "dev": true >+ }, >+ "semver": { >+ "version": "5.4.1", >+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", >+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", >+ "dev": true >+ }, >+ "shebang-command": { >+ "version": "1.2.0", >+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", >+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", >+ "dev": true, >+ "requires": { >+ "shebang-regex": "1.0.0" >+ } >+ }, >+ "shebang-regex": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", >+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", >+ "dev": true >+ }, >+ "signal-exit": { >+ "version": "3.0.2", >+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", >+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", >+ "dev": true >+ }, >+ "slice-ansi": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", >+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", >+ "dev": true, >+ "requires": { >+ "is-fullwidth-code-point": "2.0.0" >+ } >+ }, >+ "sprintf-js": { >+ "version": "1.0.3", >+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", >+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", >+ "dev": true >+ }, >+ "string-width": { >+ "version": "2.1.1", >+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", >+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", >+ "dev": true, >+ "requires": { >+ "is-fullwidth-code-point": "2.0.0", >+ "strip-ansi": "4.0.0" >+ } >+ }, >+ "string_decoder": { >+ "version": "1.0.3", >+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", >+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", >+ "dev": true, >+ "requires": { >+ "safe-buffer": "5.1.1" >+ } >+ }, >+ "strip-ansi": { >+ "version": "4.0.0", >+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", >+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", >+ "dev": true, >+ "requires": { >+ "ansi-regex": "3.0.0" >+ }, >+ "dependencies": { >+ "ansi-regex": { >+ "version": "3.0.0", >+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", >+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", >+ "dev": true >+ } >+ } >+ }, >+ "strip-json-comments": { >+ "version": "2.0.1", >+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", >+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", >+ "dev": true >+ }, >+ "supports-color": { >+ "version": "2.0.0", >+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", >+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", >+ "dev": true >+ }, >+ "table": { >+ "version": "4.0.2", >+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", >+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", >+ "dev": true, >+ "requires": { >+ "ajv": "5.3.0", >+ "ajv-keywords": "2.1.1", >+ "chalk": "2.3.0", >+ "lodash": "4.17.4", >+ "slice-ansi": "1.0.0", >+ "string-width": "2.1.1" >+ } >+ }, >+ "text-table": { >+ "version": "0.2.0", >+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", >+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", >+ "dev": true >+ }, >+ "through": { >+ "version": "2.3.8", >+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", >+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", >+ "dev": true >+ }, >+ "tmp": { >+ "version": "0.0.33", >+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", >+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", >+ "dev": true, >+ "requires": { >+ "os-tmpdir": "1.0.2" >+ } >+ }, >+ "tryit": { >+ "version": "1.0.3", >+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", >+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", >+ "dev": true >+ }, >+ "type-check": { >+ "version": "0.3.2", >+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", >+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", >+ "dev": true, >+ "requires": { >+ "prelude-ls": "1.1.2" >+ } >+ }, >+ "typedarray": { >+ "version": "0.0.6", >+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", >+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", >+ "dev": true >+ }, >+ "util-deprecate": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", >+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", >+ "dev": true >+ }, >+ "which": { >+ "version": "1.3.0", >+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", >+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", >+ "dev": true, >+ "requires": { >+ "isexe": "2.0.0" >+ } >+ }, >+ "wordwrap": { >+ "version": "1.0.0", >+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", >+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", >+ "dev": true >+ }, >+ "wrappy": { >+ "version": "1.0.2", >+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", >+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", >+ "dev": true >+ }, >+ "write": { >+ "version": "0.2.1", >+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", >+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", >+ "dev": true, >+ "requires": { >+ "mkdirp": "0.5.1" >+ } >+ }, >+ "yallist": { >+ "version": "2.1.2", >+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", >+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", >+ "dev": true >+ } >+ } >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package.json b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package.json >new file mode 100644 >index 0000000000000000000000000000000000000000..70515d8b715f239636d7a50f253e17eaaaa815c4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package.json >@@ -0,0 +1,14 @@ >+{ >+ "name": "webrtc-testing-tools", >+ "version": "1.0.0", >+ "description": "Tools for WebRTC testing", >+ "scripts": { >+ "lint": "eslint -c .eslintrc.js ../*.html ../*.js" >+ }, >+ "devDependencies": { >+ "eslint": "^4.11.0", >+ "eslint-plugin-html": "^4.0.0" >+ }, >+ "license": "BSD", >+ "private": true >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..2367e15d7696bf043bdff964dfdf1fb7eb4fbc32 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/README.md >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package-lock.json >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/tools/package.json >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webrtc/w3c-import.log >index fb9beaeabae25343effa93c68cab985b55523f4c..43b82596e0b825f6931e3e6b30a848c8bd3b0bd9 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/w3c-import.log >@@ -33,6 +33,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceCandidate-constructor.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCIceTransport.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-add-track-no-deadlock.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTrack.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addTransceiver.html >@@ -41,10 +42,11 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-constructor.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createAnswer.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer-offerToReceive.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createOffer.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-generateCertificate.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getDefaultIceServers.html >-/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getIdentityAssertion.sub.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getTransceivers.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-helper.js >@@ -64,8 +66,11 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-answer.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-offer.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-pranswer.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-track-stats.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnectionIceEvent-constructor.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpCapabilities-helper.js > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpParameters-codecs.html >@@ -87,13 +92,14 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver-setCodecPreferences.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver-setDirection.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-constructor.html >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCSctpTransport-maxMessageSize.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCStats-helper.js > /LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCTrackEvent-constructor.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/datachannel-emptystring.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/dictionary-helper.js > /LayoutTests/imported/w3c/web-platform-tests/webrtc/getstats.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/historical.html >-/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.js >+/LayoutTests/imported/w3c/web-platform-tests/webrtc/identity-helper.sub.js > /LayoutTests/imported/w3c/web-platform-tests/webrtc/interfaces.https.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call.html > /LayoutTests/imported/w3c/web-platform-tests/webrtc/promises-call.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/OWNERS b/LayoutTests/imported/w3c/web-platform-tests/webxr/OWNERS >new file mode 100644 >index 0000000000000000000000000000000000000000..8151e0df402eeff505c260fec28a7fec931e2402 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/OWNERS >@@ -0,0 +1,3 @@ >+@toji >+@paezagon >+@klausw >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..8e9841f084632b64a838c1fed47af5e91a2231b3 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https-expected.txt >@@ -0,0 +1,202 @@ >+CONSOLE MESSAGE: line 331: callback not yet supported >+CONSOLE MESSAGE: line 331: callback not yet supported >+ >+PASS Test IDL implementation of WebXR API >+FAIL Navigator interface: attribute xr assert_true: The prototype object must have a property "xr" expected true got false >+PASS Unscopable handled correctly for xr property on Navigator >+FAIL Navigator interface: navigator must inherit property "xr" with the proper type assert_inherits: property "xr" not found in prototype chain >+FAIL XR interface: existence and properties of interface object assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface object length assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface object name assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XR" expected property "XR" missing >+FAIL XR interface: operation requestDevice() assert_own_property: self does not have own property "XR" expected property "XR" missing >+PASS Unscopable handled correctly for requestDevice() on XR >+FAIL XR interface: attribute ondevicechange assert_own_property: self does not have own property "XR" expected property "XR" missing >+PASS Unscopable handled correctly for ondevicechange property on XR >+FAIL XRDevice interface: existence and properties of interface object assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface object length assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface object name assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+FAIL XRDevice interface: operation supportsSession(XRSessionCreationOptions) assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+PASS Unscopable handled correctly for supportsSession(XRSessionCreationOptions) on XRDevice >+FAIL XRDevice interface: operation requestSession(XRSessionCreationOptions) assert_own_property: self does not have own property "XRDevice" expected property "XRDevice" missing >+PASS Unscopable handled correctly for requestSession(XRSessionCreationOptions) on XRDevice >+FAIL XRSession interface: existence and properties of interface object assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface object length assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface object name assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+FAIL XRSession interface: attribute device assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for device property on XRSession >+FAIL XRSession interface: attribute exclusive assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for exclusive property on XRSession >+FAIL XRSession interface: attribute outputContext assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for outputContext property on XRSession >+FAIL XRSession interface: attribute depthNear assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for depthNear property on XRSession >+FAIL XRSession interface: attribute depthFar assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for depthFar property on XRSession >+FAIL XRSession interface: attribute baseLayer assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for baseLayer property on XRSession >+FAIL XRSession interface: operation requestFrameOfReference(XRFrameOfReferenceType, XRFrameOfReferenceOptions) assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for requestFrameOfReference(XRFrameOfReferenceType, XRFrameOfReferenceOptions) on XRSession >+FAIL XRSession interface: operation requestAnimationFrame(XRFrameRequestCallback) assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for requestAnimationFrame(XRFrameRequestCallback) on XRSession >+FAIL XRSession interface: operation cancelAnimationFrame(long) assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for cancelAnimationFrame(long) on XRSession >+FAIL XRSession interface: operation end() assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for end() on XRSession >+FAIL XRSession interface: attribute onblur assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for onblur property on XRSession >+FAIL XRSession interface: attribute onfocus assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for onfocus property on XRSession >+FAIL XRSession interface: attribute onresetpose assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for onresetpose property on XRSession >+FAIL XRSession interface: attribute onend assert_own_property: self does not have own property "XRSession" expected property "XRSession" missing >+PASS Unscopable handled correctly for onend property on XRSession >+FAIL XRPresentationFrame interface: existence and properties of interface object assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface object length assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface object name assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+FAIL XRPresentationFrame interface: attribute views assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+PASS Unscopable handled correctly for views property on XRPresentationFrame >+FAIL XRPresentationFrame interface: operation getDevicePose(XRCoordinateSystem) assert_own_property: self does not have own property "XRPresentationFrame" expected property "XRPresentationFrame" missing >+PASS Unscopable handled correctly for getDevicePose(XRCoordinateSystem) on XRPresentationFrame >+FAIL XRCoordinateSystem interface: existence and properties of interface object assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface object length assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface object name assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+FAIL XRCoordinateSystem interface: operation getTransformTo(XRCoordinateSystem) assert_own_property: self does not have own property "XRCoordinateSystem" expected property "XRCoordinateSystem" missing >+PASS Unscopable handled correctly for getTransformTo(XRCoordinateSystem) on XRCoordinateSystem >+FAIL XRFrameOfReference interface: existence and properties of interface object assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface object length assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface object name assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+FAIL XRFrameOfReference interface: attribute bounds assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+PASS Unscopable handled correctly for bounds property on XRFrameOfReference >+FAIL XRFrameOfReference interface: attribute emulatedHeight assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+PASS Unscopable handled correctly for emulatedHeight property on XRFrameOfReference >+FAIL XRFrameOfReference interface: attribute onboundschange assert_own_property: self does not have own property "XRFrameOfReference" expected property "XRFrameOfReference" missing >+PASS Unscopable handled correctly for onboundschange property on XRFrameOfReference >+FAIL XRStageBounds interface: existence and properties of interface object assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface object length assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface object name assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+FAIL XRStageBounds interface: attribute geometry assert_own_property: self does not have own property "XRStageBounds" expected property "XRStageBounds" missing >+PASS Unscopable handled correctly for geometry property on XRStageBounds >+FAIL XRStageBoundsPoint interface: existence and properties of interface object assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface object length assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface object name assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+FAIL XRStageBoundsPoint interface: attribute x assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+PASS Unscopable handled correctly for x property on XRStageBoundsPoint >+FAIL XRStageBoundsPoint interface: attribute z assert_own_property: self does not have own property "XRStageBoundsPoint" expected property "XRStageBoundsPoint" missing >+PASS Unscopable handled correctly for z property on XRStageBoundsPoint >+FAIL XRView interface: existence and properties of interface object assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface object length assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface object name assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+FAIL XRView interface: attribute eye assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+PASS Unscopable handled correctly for eye property on XRView >+FAIL XRView interface: attribute projectionMatrix assert_own_property: self does not have own property "XRView" expected property "XRView" missing >+PASS Unscopable handled correctly for projectionMatrix property on XRView >+FAIL XRViewport interface: existence and properties of interface object assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface object length assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface object name assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+FAIL XRViewport interface: attribute x assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+PASS Unscopable handled correctly for x property on XRViewport >+FAIL XRViewport interface: attribute y assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+PASS Unscopable handled correctly for y property on XRViewport >+FAIL XRViewport interface: attribute width assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+PASS Unscopable handled correctly for width property on XRViewport >+FAIL XRViewport interface: attribute height assert_own_property: self does not have own property "XRViewport" expected property "XRViewport" missing >+PASS Unscopable handled correctly for height property on XRViewport >+FAIL XRDevicePose interface: existence and properties of interface object assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface object length assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface object name assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+FAIL XRDevicePose interface: attribute poseModelMatrix assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+PASS Unscopable handled correctly for poseModelMatrix property on XRDevicePose >+FAIL XRDevicePose interface: operation getViewMatrix(XRView) assert_own_property: self does not have own property "XRDevicePose" expected property "XRDevicePose" missing >+PASS Unscopable handled correctly for getViewMatrix(XRView) on XRDevicePose >+FAIL XRLayer interface: existence and properties of interface object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRLayer interface object length assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRLayer interface object name assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRLayer interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRLayer interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRLayer interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing >+FAIL XRWebGLLayer interface: existence and properties of interface object assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface object length assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface object name assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+FAIL XRWebGLLayer interface: attribute context assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for context property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute antialias assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for antialias property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute depth assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for depth property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute stencil assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for stencil property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute alpha assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for alpha property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute multiview assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for multiview property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute framebuffer assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for framebuffer property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute framebufferWidth assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for framebufferWidth property on XRWebGLLayer >+FAIL XRWebGLLayer interface: attribute framebufferHeight assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for framebufferHeight property on XRWebGLLayer >+FAIL XRWebGLLayer interface: operation getViewport(XRView) assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for getViewport(XRView) on XRWebGLLayer >+FAIL XRWebGLLayer interface: operation requestViewportScaling(double) assert_own_property: self does not have own property "XRWebGLLayer" expected property "XRWebGLLayer" missing >+PASS Unscopable handled correctly for requestViewportScaling(double) on XRWebGLLayer >+FAIL XRPresentationContext interface: existence and properties of interface object assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface object length assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface object name assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+FAIL XRPresentationContext interface: attribute canvas assert_own_property: self does not have own property "XRPresentationContext" expected property "XRPresentationContext" missing >+PASS Unscopable handled correctly for canvas property on XRPresentationContext >+FAIL XRSessionEvent interface: existence and properties of interface object assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface object length assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface object name assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+FAIL XRSessionEvent interface: attribute session assert_own_property: self does not have own property "XRSessionEvent" expected property "XRSessionEvent" missing >+PASS Unscopable handled correctly for session property on XRSessionEvent >+FAIL XRCoordinateSystemEvent interface: existence and properties of interface object assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface object length assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface object name assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+FAIL XRCoordinateSystemEvent interface: attribute coordinateSystem assert_own_property: self does not have own property "XRCoordinateSystemEvent" expected property "XRCoordinateSystemEvent" missing >+PASS Unscopable handled correctly for coordinateSystem property on XRCoordinateSystemEvent >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https.html b/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https.html >new file mode 100644 >index 0000000000000000000000000000000000000000..385f835fdb6aa12ed189638a49929c1c0fdafde4 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<meta charset="utf-8"> >+<title>WebXR Device API IDL Tests</title> >+<link rel="help" href="https://immersive-web.github.io/webxr/spec/latest/"> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="/resources/WebIDLParser.js"></script> >+<script src="/resources/idlharness.js"></script> >+<script> >+"use strict"; >+ >+promise_test(async () => { >+ const idl_array = new IdlArray(); >+ const dom_idl = await fetch("/interfaces/dom.idl").then(r => r.text()); >+ const webxr_idl = await fetch("/interfaces/webxr.idl").then(r => r.text()); >+ >+ idl_array.add_untested_idls(dom_idl); >+ idl_array.add_untested_idls("interface Navigator {};"); >+ idl_array.add_idls(webxr_idl); >+ idl_array.add_idls("dictionary WebGLContextAttributes {};"); >+ idl_array.add_objects({ >+ Navigator:['navigator'], >+ }); >+ idl_array.test(); >+}, "Test IDL implementation of WebXR API"); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..b1396019dc42697fa7902cad1523f9e184316543 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/w3c-import.log >@@ -0,0 +1,18 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_check.html >+/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_util.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_check.html b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_check.html >new file mode 100644 >index 0000000000000000000000000000000000000000..2d8e5b387dc88588921ccfa49dd14db58009900c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_check.html >@@ -0,0 +1,17 @@ >+<script src=webxr_util.js></script> >+<script> >+'use strict'; >+let definedObjects = []; >+let undefinedObjects = []; >+ >+forEachWebxrObject((obj, name) => { >+ if(obj == undefined) { >+ undefinedObjects.push(name); >+ } else { >+ definedObjects.push(name); >+ } >+}); >+ >+window.parent.postMessage({ undefinedObjects, definedObjects}, '*'); >+ >+</script> >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_util.js b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_util.js >new file mode 100644 >index 0000000000000000000000000000000000000000..388c7578c5e49340a305c8c4a90c74d528dddf00 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/resources/webxr_util.js >@@ -0,0 +1,28 @@ >+// This functions calls a callback with each API object as specified >+// by https://immersive-web.github.io/webxr/spec/latest/, allowing >+// checks to be made on all ojects. >+// Arguements: >+// callback: A callback function with two arguements, the first >+// being the API object, the second being the name of >+// that API object. >+function forEachWebxrObject(callback) { >+ callback(window.navigator.xr, 'navigator.xr'); >+ callback(window.XRDevice, 'XRDevice'); >+ callback(window.XRSession, 'XRSession'); >+ callback(window.XRSessionCreationOptions, 'XRSessionCreationOptions'); >+ callback(window.XRFrameRequestCallback, 'XRFrameRequestCallback'); >+ callback(window.XRPresentationContext, 'XRPresentationContext'); >+ callback(window.XRPresentationFrame, 'XRPresentationFrame'); >+ callback(window.XRView, 'XRView'); >+ callback(window.XRViewport, 'XRViewport'); >+ callback(window.XRDevicePose, 'XRDevicePose'); >+ callback(window.XRLayer, 'XRLayer'); >+ callback(window.XRWebGLLayer, 'XRWebGLLayer'); >+ callback(window.XRWebGLLayerInit, 'XRWebGLLayerInit'); >+ callback(window.XRCoordinateSystem, 'XRCoordinateSystem'); >+ callback(window.XRFrameOfReference, 'XRFrameOfReference'); >+ callback(window.XRStageBounds, 'XRStageBounds'); >+ callback(window.XRStageBoundsPoint, 'XRStageBoundsPoint'); >+ callback(window.XRSessionEvent, 'XRSessionEvent'); >+ callback(window.XRCoordinateSystemEvent, 'XRCoordinateSystemEvent'); >+} >\ No newline at end of file >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/webxr/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..a591672f643ff8a91b31ceef7d9fdf129af386c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/w3c-import.log >@@ -0,0 +1,19 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/webxr/OWNERS >+/LayoutTests/imported/w3c/web-platform-tests/webxr/interfaces.https.html >+/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..cff5839d2dc01bcdf0523601dd02a88a8d8b6c9c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub-expected.txt >@@ -0,0 +1,8 @@ >+Blocked access to external URL https://www.localhost:9443/webxr/resources/webxr_check.html >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+PASS Test webxr not available in insecure context >+TIMEOUT Test webxr not available in secure context in insecure context Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub.html b/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..515b2ad1a8d015120032ea56c473922a2af73e85 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/webxr/webxr_availability.http.sub.html >@@ -0,0 +1,39 @@ >+<!DOCTYPE html> >+<body> >+ <script src=/resources/testharness.js></script> >+ <script src=/resources/testharnessreport.js></script> >+ <script src=/webxr/resources/webxr_util.js></script> >+ <script> >+ 'use strict'; >+ >+ var same_origin_src = '/webxr/resources/'; >+ var cross_origin_https_src = 'https://{{domains[www]}}:{{ports[https][0]}}' + >+ same_origin_src; >+ >+ test(t => { >+ forEachWebxrObject((obj, name) => { >+ assert_equals(obj, undefined, name + ' was defined in insecure context.'); >+ }); >+ }, 'Test webxr not available in insecure context'); >+ >+ async_test(t => { >+ let frame = document.createElement('iframe'); >+ frame.src = cross_origin_https_src + 'webxr_check.html'; >+ >+ window.addEventListener('message', t.step_func(function handler(evt) { >+ if (evt.source === frame.contentWindow) { >+ document.body.removeChild(frame); >+ window.removeEventListener('message', handler); >+ >+ assert_equals(evt.data.definedObjects.length, 0, >+ "Some objects were defined in insecure context: " + >+ evt.data.definedObjects.toString()); >+ t.done(); >+ } >+ })); >+ >+ document.body.appendChild(frame); >+ }, 'Test webxr not available in secure context in insecure context'); >+ >+ </script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..27019e065cdd0313f5b2f77661c2ae4a06c61f4b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow-expected.txt >@@ -0,0 +1,3 @@ >+ >+FAIL performance.now() exists in shared workers and reports reasonable times Can't find variable: SharedWorker >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow.html b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a784293b342ff43cb97d252d57330cfae48d4805 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>window.performance.now in shared workers</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+<script> >+async_test(function(t) { >+ const worker = new SharedWorker('support/WorkerSendingPerformanceNow.js'); >+ worker.port.onmessage = t.step_func(event => { >+ const results = event.data; >+ assert_true(results.length == 4); >+ assert_equals(results[0], 'undefined', >+ 'workerStart not defined on the Worker object'); >+ assert_equals(results[1], 'object', 'self.performance is defined'); >+ assert_equals(results[2], 'function', 'self.performance.now is defined'); >+ assert_greater_than(results[3], 0, 'Time in the worker should be positive'); >+ assert_greater_than(window.performance.now(), results[3], 'Time in the worker should be before the current time in the main document'); >+ setupIframe(); >+ }); >+ window.iframeStartTime = 0; >+ window.test_iframe = function(event) { >+ const workerTime = event.data[3]; >+ assert_greater_than(workerTime, window.iframeStartTime, >+ 'Time since origin time should be greater in the shared worker than the iframe'); >+ t.done(); >+ } >+ function setupIframe() { >+ const iframe = document.createElement('iframe'); >+ document.body.appendChild(iframe); >+ const script = iframe.contentWindow.document.createElement('script'); >+ script.innerHTML = >+ 'window.top.iframeStartTime = window.performance.now();' + >+ 'const worker = new SharedWorker("support/WorkerSendingPerformanceNow.js");' + >+ 'worker.port.onmessage = function(event) {' + >+ ' window.top.test_iframe(event);' + >+ '};' + >+ 'worker.port.postMessage("");'; >+ iframe.contentWindow.document.body.appendChild(script); >+ } >+ worker.port.postMessage(''); >+}, 'performance.now() exists in shared workers and reports reasonable times'); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..027eb4156b0d4e01f5a083a2ffd843e443602c7a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl-expected.txt >@@ -0,0 +1,9 @@ >+CONSOLE MESSAGE: line 6: ReferenceError: Can't find variable: SharedWorker >+CONSOLE MESSAGE: line 6: ReferenceError: Can't find variable: SharedWorker >+ >+ >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT Data URL not shared by cross-origin SharedWorkers Test timed out >+NOTRUN Data URLs shared by same-origin SharedWorkers >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl.html b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c1dec27d49f8d711f6fc8e4b5a4932b31f9875be >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl.html >@@ -0,0 +1,63 @@ >+<!DOCTYPE html> >+<title>Shared Worker: Data URL cross-origin checks</title> >+<script src="/common/get-host-info.sub.js"></script> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<body> >+</body> >+<script> >+ >+function dirname(path) { >+ return path.replace(/\/[^\/]*$/, '/'); >+} >+ >+promise_test(t => { >+ return new Promise(function(resolve) { >+ let count = 0; >+ onmessage = e => { >+ assert_equals(e.data, 1); >+ if (++count == 2) { >+ resolve(true); >+ } >+ }; >+ >+ let iframeA = document.createElement('iframe'); >+ document.body.appendChild(iframeA); >+ iframeA.src = get_host_info().HTTP_REMOTE_ORIGIN + >+ dirname(location.pathname) + >+ "support/iframe_sw_dataUrl.html"; >+ >+ let iframeB = document.createElement('iframe'); >+ document.body.appendChild(iframeB); >+ iframeB.src = get_host_info().HTTPS_REMOTE_ORIGIN + >+ dirname(location.pathname) + >+ "support/iframe_sw_dataUrl.html"; >+ }); >+}, 'Data URL not shared by cross-origin SharedWorkers'); >+ >+promise_test(t => { >+ return new Promise(function(resolve) { >+ let count = 0; >+ onmessage = e => { >+ assert_equals(e.data, ++count); >+ if (count == 2) { >+ resolve(true); >+ } >+ }; >+ >+ let iframeA = document.createElement('iframe'); >+ document.body.appendChild(iframeA); >+ iframeA.src = get_host_info().HTTP_ORIGIN + >+ dirname(location.pathname) + >+ "support/iframe_sw_dataUrl.html"; >+ >+ let iframeB = document.createElement('iframe'); >+ document.body.appendChild(iframeB); >+ iframeB.src = get_host_info().HTTP_ORIGIN + >+ dirname(location.pathname) + >+ "support/iframe_sw_dataUrl.html"; >+ }); >+}, 'Data URLs shared by same-origin SharedWorkers'); >+ >+</script> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..12cd1d49c755af7ec0ccc5fe64352ea1b6fbfe1d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame-expected.txt >@@ -0,0 +1,6 @@ >+CONSOLE MESSAGE: line 3: ReferenceError: Can't find variable: requestAnimationFrame >+ >+Harness Error (FAIL), message = ReferenceError: Can't find variable: requestAnimationFrame >+ >+TIMEOUT WorkerGlobalScope API: requestAnimationFrame() Test timed out >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame.htm b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame.htm >new file mode 100644 >index 0000000000000000000000000000000000000000..dcf58d92497e01b4ea58db66730e5ed91b054f34 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame.htm >@@ -0,0 +1,31 @@ >+<!DOCTYPE html> >+<title> WorkerGlobalScope API: requestAnimationFrame()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script id="worker" type="text/worker"> >+const res = []; >+requestAnimationFrame((dt) => { >+ res.push(dt); >+ requestAnimationFrame((dt) => { >+ res.push(dt); >+ requestAnimationFrame((dt) => { >+ res.push(dt); >+ postMessage(res); >+ }); >+ }); >+}); >+</script> >+<script> >+async_test(function(t) { >+ var blob = new Blob([document.getElementById('worker').textContent]); >+ var worker = new Worker(URL.createObjectURL(blob)); >+ worker.addEventListener("message", (ev) => { >+ const ret = ev.data; >+ assert_equals(ret.length, 3); >+ assert_true(ret[0] < ret[1]); >+ assert_true(ret[1] < ret[2]); >+ t.done(); >+ }); >+}); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2a293c5355af06d3a931f3c1b610c7bd2373e2c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS performance.now() exists in dedicated workers and reports reasonable times >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow.html b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow.html >new file mode 100644 >index 0000000000000000000000000000000000000000..467dad44e2082aa5594b4e51eb8d418ebb2cb85b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow.html >@@ -0,0 +1,26 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<title>performance.now in dedicated workers</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+</head> >+<body> >+<script> >+async_test(function(t) { >+ const worker = new Worker('support/WorkerSendingPerformanceNow.js'); >+ worker.onmessage = t.step_func_done(event => { >+ const results = event.data; >+ assert_true(results.length == 4); >+ assert_equals(results[0], 'undefined', >+ 'workerStart not defined on the Worker object'); >+ assert_equals(results[1], 'object', "self.performance is defined"); >+ assert_equals(results[2], 'function', "self.performance.now is defined"); >+ assert_greater_than(results[3], 0, "Time in the worker should be positive"); >+ assert_greater_than(window.performance.now(), results[3], "Time in the worker should be before the current time in the main document"); >+ }); >+ worker.postMessage(''); >+}, 'performance.now() exists in dedicated workers and reports reasonable times'); >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f9fd5085454c544d89c9cef9537282f5b4113598 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005-expected.txt >@@ -0,0 +1,3 @@ >+ >+PASS setInterval when closing >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005.html b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b86eff1fbddb601667f7b69c9ed4955998735dde >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005.html >@@ -0,0 +1,23 @@ >+<!-- >+self.close(); >+var t = setInterval(function() {}, 10); >+postMessage(t); >+/* >+--> >+<!doctype html> >+<title>setInterval when closing</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<div id=log></div> >+<script> >+async_test(function() { >+ var worker = new Worker('#'); >+ worker.onmessage = this.step_func(function(e) { >+ assert_equals(e.data, 1); >+ this.done(); >+ }); >+}); >+</script> >+<!-- >+*/ >+//--> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/w3c-import.log >index a9353f6dfabdeebda109c667b382637bbcb06854..c6f1efd12c027a585244dad18a6bfceca8718ceb 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/w3c-import.log >@@ -18,3 +18,4 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/002.html > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/003.html > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/004.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/WindowTimers/005.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1.headers b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..a17a9a3a12cefe883a5d4dee4d5a45bef120d050 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1.headers >@@ -0,0 +1 @@ >+Content-Type: application/javascript >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null.headers b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..a17a9a3a12cefe883a5d4dee4d5a45bef120d050 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null.headers >@@ -0,0 +1 @@ >+Content-Type: application/javascript >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined.headers b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..a17a9a3a12cefe883a5d4dee4d5a45bef120d050 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined.headers >@@ -0,0 +1 @@ >+Content-Type: application/javascript >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/w3c-import.log >index d424d8ca680c1b077e210df77b45065db68df103..b0f5fc52b44fb6d26dc5303c5645035a6ca64d0f 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/w3c-import.log >@@ -27,5 +27,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/011.html > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/012.html > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1 >+/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/1.headers > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null >+/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/null.headers > /LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined >+/LayoutTests/imported/w3c/web-platform-tests/workers/interfaces/WorkerUtils/importScripts/undefined.headers >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d25081d3671427ea236ccab0567da064c3dab52e >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp-expected.txt >@@ -0,0 +1,17 @@ >+CONSOLE MESSAGE: Unrecognized Content-Security-Policy directive 'worker-src'. >+ >+CONSOLE MESSAGE: line 2: SyntaxError: Unexpected token '*'. import call expects exactly one argument. >+CONSOLE MESSAGE: Unrecognized Content-Security-Policy directive 'worker-src'. >+ >+CONSOLE MESSAGE: line 2: SyntaxError: Unexpected token '*'. import call expects exactly one argument. >+ >+PASS worker-src 'self' directive should disallow cross origin static import. >+FAIL worker-src * directive should allow cross origin static import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+FAIL script-src 'self' directive should disallow cross origin static import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+FAIL script-src * directive should allow cross origin static import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+FAIL worker-src * directive should override script-src 'self' directive and allow cross origin static import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+PASS worker-src 'self' directive should override script-src * directive and disallow cross origin static import. >+FAIL script-src 'self' directive should disallow cross origin dynamic import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+FAIL script-src * directive should allow cross origin dynamic import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+FAIL worker-src 'self' directive should not take effect on dynamic import. assert_equals: expected (string) "LOADED" but got (object) object "[object Object]" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html >new file mode 100644 >index 0000000000000000000000000000000000000000..02b88e82269f370080074eea78a65490c964e3a7 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html >@@ -0,0 +1,114 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: CSP for ES Modules</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+async function openWindow(url) { >+ const win = window.open(url, '_blank'); >+ add_result_callback(() => win.close()); >+ const msg_event = await new Promise(resolve => window.onmessage = resolve); >+ assert_equals(msg_event.data, 'LOADED'); >+ return win; >+} >+ >+function import_csp_test( >+ cspHeader, scriptURL, expectedImportedModules, description) { >+ const windowURL = >+ `resources/new-worker-window.html?pipe=header(` + >+ `Content-Security-Policy, ${cspHeader})`; >+ promise_test(async () => { >+ // Open a window that has the given CSP header. >+ const win = await openWindow(windowURL); >+ // Ask the window to start a dedicated worker. The worker inherits the >+ // window's CSP header. >+ // https://w3c.github.io/webappsec-csp/#initialize-global-object-csp >+ win.postMessage(scriptURL, '*'); >+ const msg_event = await new Promise(resolve => window.onmessage = resolve); >+ assert_array_equals(msg_event.data, expectedImportedModules); >+ }, description); >+} >+ >+// Tests for static import. >+// >+// Static import should obey the worker-src directive and the script-src >+// directive. If the both directives are specified, the worker-src directive >+// should be prioritized. >+// >+// Step 1: "If the result of executing 6.6.1.11 Get the effective directive for >+// request on request is "worker-src", and policy contains a directive whose >+// name is "worker-src", return "Allowed"." >+// "Note: If worker-src is present, weâll defer to it when handling worker >+// requests." >+// https://w3c.github.io/webappsec-csp/#script-src-pre-request >+ >+import_csp_test( >+ "worker-src 'self' 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ['ERROR'], >+ "worker-src 'self' directive should disallow cross origin static import."); >+ >+import_csp_test( >+ "worker-src * 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ["export-on-load-script.js"], >+ "worker-src * directive should allow cross origin static import.") >+ >+import_csp_test( >+ "script-src 'self' 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ['ERROR'], >+ "script-src 'self' directive should disallow cross origin static import."); >+ >+import_csp_test( >+ "script-src * 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ["export-on-load-script.js"], >+ "script-src * directive should allow cross origin static import.") >+ >+import_csp_test( >+ "worker-src *; script-src 'self' 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ["export-on-load-script.js"], >+ "worker-src * directive should override script-src 'self' directive and " + >+ "allow cross origin static import."); >+ >+import_csp_test( >+ "worker-src 'self'; script-src * 'unsafe-inline'", >+ "static-import-remote-origin-script-worker.sub.js", >+ ['ERROR'], >+ "worker-src 'self' directive should override script-src * directive and " + >+ "disallow cross origin static import."); >+ >+// Tests for dynamic import. >+// >+// Dynamic import should obey the script-src directive instead of the worker-src >+// directive according to the specs: >+// >+// Dynamic import has the "script" destination. >+// Step 2.4: "Fetch a module script graph given url, ..., "script", ..." >+// https://html.spec.whatwg.org/multipage/webappapis.html#hostimportmoduledynamically(referencingscriptormodule,-specifier,-promisecapability) >+// >+// The "script" destination should obey the script-src CSP directive. >+// Step 2: "If request's destination is script-like:" >+// https://w3c.github.io/webappsec-csp/#script-src-pre-request >+ >+import_csp_test( >+ "script-src 'self' 'unsafe-inline'", >+ "dynamic-import-remote-origin-script-worker.sub.js", >+ ['ERROR'], >+ "script-src 'self' directive should disallow cross origin dynamic import."); >+ >+import_csp_test( >+ "script-src * 'unsafe-inline'", >+ "dynamic-import-remote-origin-script-worker.sub.js", >+ ["export-on-load-script.js"], >+ "script-src * directive should allow cross origin dynamic import.") >+ >+import_csp_test( >+ "worker-src 'self' 'unsafe-inline'", >+ "dynamic-import-remote-origin-script-worker.sub.js", >+ ["export-on-load-script.js"], >+ "worker-src 'self' directive should not take effect on dynamic import."); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..f3cf69d7af009f9467e7dba51dfda40b8f4d86f2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-expected.txt >@@ -0,0 +1,12 @@ >+CONSOLE MESSAGE: line 1: SyntaxError: Unexpected token '*'. import call expects exactly one argument. >+ >+Harness Error (FAIL), message = SyntaxError: Unexpected token '*'. import call expects exactly one argument. >+ >+TIMEOUT Static import. Test timed out >+NOTRUN Nested static import. >+NOTRUN Static import and then dynamic import. >+NOTRUN Dynamic import. >+NOTRUN Nested dynamic import. >+NOTRUN Dynamic import and then static import. >+NOTRUN eval(import()). >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9a7f05b6d1ce19ca08e31b5e20d6aab10a90833a >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure-expected.txt >@@ -0,0 +1,11 @@ >+CONSOLE MESSAGE: line 1: SyntaxError: Unexpected token '*'. import call expects exactly one argument. >+CONSOLE MESSAGE: line 1: SyntaxError: Unexpected string literal './non-existent-script.js'. import call expects exactly one argument. >+ >+Harness Error (FAIL), message = SyntaxError: Unexpected string literal './non-existent-script.js'. import call expects exactly one argument. >+ >+FAIL importScripts() on module worker should throw an exception. assert_equals: expected "TypeError" but got "LOADED" >+PASS Static import on classic worker should throw an exception. >+PASS Worker construction for non-existent script should dispatch an ErrorEvent. >+PASS Static import for non-existent script should dispatch an ErrorEvent. >+FAIL Dynamic import for non-existent script should throw an exception. assert_equals: expected "TypeError" but got "Error" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1c3adeb343773886c1c52dee49a011ce1250cb67 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure.html >@@ -0,0 +1,42 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: import failure</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+promise_test(async () => { >+ const scriptURL = 'resources/import-scripts-worker.js'; >+ const worker = new Worker(scriptURL, { type: 'module' }); >+ const msg_event = await new Promise(resolve => worker.onmessage = resolve); >+ assert_equals(msg_event.data, 'TypeError'); >+}, 'importScripts() on module worker should throw an exception.'); >+ >+promise_test(async () => { >+ const scriptURL = 'resources/static-import-worker.js'; >+ const worker = new Worker(scriptURL, { type: 'classic' }); >+ await new Promise(resolve => worker.onerror = resolve); >+}, 'Static import on classic worker should throw an exception.'); >+ >+promise_test(() => { >+ const scriptURL = 'resources/non-existent-worker.js'; >+ const worker = new Worker(scriptURL, { type: 'module' }); >+ return new Promise(resolve => worker.onerror = resolve); >+}, 'Worker construction for non-existent script should dispatch an ' + >+ 'ErrorEvent.'); >+ >+promise_test(() => { >+ const scriptURL = 'resources/static-import-non-existent-script-worker.js'; >+ const worker = new Worker(scriptURL, { type: 'module' }); >+ return new Promise(resolve => worker.onerror = resolve); >+}, 'Static import for non-existent script should dispatch an ErrorEvent.'); >+ >+promise_test(async () => { >+ const script_url = './non-existent-worker.js'; >+ const worker = new Worker('resources/dynamic-import-given-url-worker.js', >+ { type: 'module' }); >+ worker.postMessage(script_url); >+ const msg_event = await new Promise(resolve => worker.onmessage = resolve); >+ assert_equals(msg_event.data, 'TypeError'); >+}, 'Dynamic import for non-existent script should throw an exception.'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..1697f90ee3535f8a90c97d3df44dd00a9ff82e7b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta-expected.txt >@@ -0,0 +1,8 @@ >+CONSOLE MESSAGE: line 1: SyntaxError: import.meta is only valid inside modules. >+ >+Harness Error (FAIL), message = SyntaxError: import.meta is only valid inside modules. >+ >+TIMEOUT Test import.meta.url on the top-level module script. Test timed out >+NOTRUN Test import.meta.url on the imported module script. >+NOTRUN Test import.meta.url on the imported module script with a fragment. >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6960cbe57702e71bf51debaf796de8732864e0c2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta.html >@@ -0,0 +1,38 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: import.meta</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+promise_test(() => { >+ const script_url = 'resources/import-meta-url-worker.js'; >+ const worker = new Worker(script_url, { type: 'module' }); >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_true(msg_event.data.endsWith(script_url))); >+}, 'Test import.meta.url on the top-level module script.'); >+ >+promise_test(() => { >+ const script_url = 'import-meta-url-worker.js'; >+ const worker = new Worker('resources/dynamic-import-given-url-worker.js', >+ { type: 'module' }); >+ worker.postMessage('./' + script_url); >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_true(msg_event.data.endsWith(script_url))); >+}, 'Test import.meta.url on the imported module script.'); >+ >+promise_test(() => { >+ const script_url = 'import-meta-url-worker.js'; >+ const worker = new Worker('resources/dynamic-import-given-url-worker.js', >+ { type: 'module' }); >+ worker.postMessage('./' + script_url); >+ >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_true(msg_event.data.endsWith(script_url))) >+ .then(() => { >+ worker.postMessage('./' + script_url + '#1'); >+ return new Promise(resolve => worker.onmessage = resolve); >+ }) >+ .then(msg_event => assert_true(msg_event.data.endsWith(script_url))); >+}, 'Test import.meta.url on the imported module script with a fragment.'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a45fa9ed36ff149f44069ef798154d2f65714f7d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: import</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+// Starts a dedicated worker for |scriptURL| and waits until the list of >+// imported modules is sent from the worker. Passes if the list is equal to >+// |expectedImportedModules|. >+function import_test(scriptURL, expectedImportedModules, description) { >+ promise_test(async () => { >+ const worker = new Worker(scriptURL, { type: 'module' }); >+ const msg_event = await new Promise(resolve => worker.onmessage = resolve); >+ assert_array_equals(msg_event.data, expectedImportedModules); >+ }, description); >+} >+ >+import_test('resources/static-import-worker.js', >+ ['export-on-load-script.js'], >+ 'Static import.'); >+ >+import_test('resources/nested-static-import-worker.js', >+ ['export-on-static-import-script.js', 'export-on-load-script.js'], >+ 'Nested static import.'); >+ >+ >+import_test('resources/static-import-and-then-dynamic-import-worker.js', >+ ['export-on-dynamic-import-script.js', 'export-on-load-script.js'], >+ 'Static import and then dynamic import.'); >+ >+import_test('resources/dynamic-import-worker.js', >+ ['export-on-load-script.js'], >+ 'Dynamic import.'); >+ >+import_test('resources/nested-dynamic-import-worker.js', >+ ['export-on-dynamic-import-script.js', 'export-on-load-script.js'], >+ 'Nested dynamic import.'); >+ >+import_test('resources/dynamic-import-and-then-static-import-worker.js', >+ ['export-on-static-import-script.js', 'export-on-load-script.js'], >+ 'Dynamic import and then static import.'); >+ >+import_test('resources/eval-dynamic-import-worker.js', >+ ['export-on-load-script.js'], >+ 'eval(import()).'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d6501aefd5f22e6131dfe7533e1e10abdb5b73ac >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials-expected.txt >@@ -0,0 +1,10 @@ >+ >+PASS new Worker() with the default credentials option should behave as credentials=same-origin and send the credentials >+FAIL new Worker() with credentials=omit should not send the credentials assert_equals: expected "" but got "COOKIE_VALUE" >+PASS new Worker() with credentials=same-origin should send the credentials >+PASS new Worker() with credentials=include should send the credentials >+PASS new Worker() with type=classic should always send the credentials regardless of the credentials option (default). >+PASS new Worker() with type=classic should always send the credentials regardless of the credentials option (omit). >+PASS new Worker() with type=classic should always send the credentials regardless of the credentials option (same-origin). >+PASS new Worker() with type=classic should always send the credentials regardless of the credentials option (include). >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html >new file mode 100644 >index 0000000000000000000000000000000000000000..6603eb9be9b8f074993abc6a7ff2f1dee453b24f >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html >@@ -0,0 +1,85 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: WorkerOptions 'credentials'</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+// Determines the expected cookie value to be reported by a dedicated worker >+// based on the given option. The worker reports an empty string as the actual >+// cookie value if the cookie wasn't sent to the server. Otherwise, it's the >+// value set by the headers file: >+// "dedicated-worker-options-credentials.html.headers" >+function DetermineExpectedCookieValue(options) { >+ // Classic script loading should always send credentials regardless of the >+ // 'credentials' option because the spec says the option takes effect only >+ // for module script loading. >+ if (options.type == 'classic') >+ return 'COOKIE_VALUE'; >+ assert_equals(options.type, 'module'); >+ >+ if (!options.credentials || >+ options.credentials == 'same-origin' || >+ options.credentials == 'include') { >+ return 'COOKIE_VALUE'; >+ } >+ if (options.credentials == 'omit') >+ return ''; >+ assert_unreached('Invalid credentials option was specified: ' + >+ options.credentials); >+} >+ >+// Runs a credentials test with the given WorkerOptions. >+function credentials_test(options, description) { >+ promise_test(async () => { >+ const worker = new Worker('resources/credentials.py', options); >+ >+ // Wait until the worker sends the actual cookie value. >+ const msg_event = await new Promise(resolve => worker.onmessage = resolve); >+ >+ const expectedCookieValue = DetermineExpectedCookieValue(options); >+ assert_equals(msg_event.data, expectedCookieValue); >+ }, description); >+} >+ >+// Tests for module scripts. >+ >+credentials_test( >+ { type: 'module'}, >+ 'new Worker() with the default credentials option should behave as ' + >+ 'credentials=same-origin and send the credentials'); >+ >+credentials_test( >+ { credentials: 'omit', type: 'module' }, >+ 'new Worker() with credentials=omit should not send the credentials'); >+ >+credentials_test( >+ { credentials: 'same-origin', type: 'module' }, >+ 'new Worker() with credentials=same-origin should send the credentials'); >+ >+credentials_test( >+ { credentials: 'include', type: 'module' }, >+ 'new Worker() with credentials=include should send the credentials'); >+ >+// Tests for classic scripts. >+ >+credentials_test( >+ { type: 'classic' }, >+ 'new Worker() with type=classic should always send the credentials ' + >+ 'regardless of the credentials option (default).'); >+ >+credentials_test( >+ { credentials: 'omit', type: 'classic' }, >+ 'new Worker() with type=classic should always send the credentials ' + >+ 'regardless of the credentials option (omit).'); >+ >+credentials_test( >+ { credentials: 'same-origin', type: 'classic' }, >+ 'new Worker() with type=classic should always send the credentials ' + >+ 'regardless of the credentials option (same-origin).'); >+ >+credentials_test( >+ { credentials: 'include', type: 'classic' }, >+ 'new Worker() with type=classic should always send the credentials ' + >+ 'regardless of the credentials option (include).'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html.headers b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..6f53744a6ae77b6e5bbc5585767984ffe36854a2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html.headers >@@ -0,0 +1,2 @@ >+Set-Cookie: COOKIE_NAME=COOKIE_VALUE >+Access-Control-Allow-Credentials: true >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..078e2a2058dd66ca6092ae13d7adcebdf9c73922 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS Test worker construction with the default worker type. >+PASS Test worker construction with the "classic" worker type. >+PASS Test worker construction with the "module" worker type. >+FAIL Test worker construction with an empty worker type. assert_equals: expected "TypeError" but got "Error" >+FAIL Test worker construction with an unknown worker type. assert_equals: expected "TypeError" but got "Error" >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type.html >new file mode 100644 >index 0000000000000000000000000000000000000000..b7c96b152950dda87ff0a34192008a6e30ec7471 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type.html >@@ -0,0 +1,47 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: WorkerOptions 'type'</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+ >+promise_test(() => { >+ const worker = new Worker('resources/post-message-on-load-worker.js'); >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_equals(msg_event.data, 'LOADED')); >+}, 'Test worker construction with the default worker type.'); >+ >+promise_test(() => { >+ const worker = new Worker('resources/post-message-on-load-worker.js', >+ { type: 'classic' }); >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_equals(msg_event.data, 'LOADED')); >+}, 'Test worker construction with the "classic" worker type.'); >+ >+promise_test(() => { >+ const worker = new Worker('resources/post-message-on-load-worker.js', >+ { type: 'module' }); >+ return new Promise(resolve => worker.onmessage = resolve) >+ .then(msg_event => assert_equals(msg_event.data, 'LOADED')); >+}, 'Test worker construction with the "module" worker type.'); >+ >+test(() => { >+ try { >+ new Worker('resources/post-message-on-load-worker.js', { type: '' }); >+ assert_unreached( >+ 'Worker construction with an empty type should throw an exception'); >+ } catch (e) { >+ assert_equals(e.name, 'TypeError'); >+ } >+}, 'Test worker construction with an empty worker type.'); >+ >+test(() => { >+ try { >+ new Worker('resources/post-message-on-load-worker.js', { type: 'unknown' }); >+ assert_unreached( >+ 'Worker construction with an unknown type should throw an exception'); >+ } catch (e) { >+ assert_equals(e.name, 'TypeError'); >+ } >+}, 'Test worker construction with an unknown worker type.'); >+ >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/credentials.py b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/credentials.py >new file mode 100644 >index 0000000000000000000000000000000000000000..8f79563fb5ff9c966c4bd188883c460a09381349 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/credentials.py >@@ -0,0 +1,10 @@ >+def main(request, response): >+ cookie = request.cookies.first("COOKIE_NAME", None) >+ >+ response_headers = [("Content-Type", "text/javascript"), >+ ("Access-Control-Allow-Credentials", "true")] >+ >+ cookie_value = ''; >+ if cookie: >+ cookie_value = cookie.value; >+ return (200, response_headers, "postMessage('"+cookie_value+"');") >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-and-then-static-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-and-then-static-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..39ab5c237e2ab54423dd32945afa3ae902087763 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-and-then-static-import-worker.js >@@ -0,0 +1,2 @@ >+import('./export-on-static-import-script.js') >+ .then(module => postMessage(module.importedModules)); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-given-url-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-given-url-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..2ea88b8071875a431cb4b40225facd1adf6d5644 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-given-url-worker.js >@@ -0,0 +1,5 @@ >+// This worker dynamically imports the script URL sent by postMessage(), and >+// sends back an error name if the dynamic import fails. >+self.addEventListener('message', msg_event => { >+ import(msg_event.data).catch(e => postMessage(e.name)); >+}); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-remote-origin-script-worker.sub.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-remote-origin-script-worker.sub.js >new file mode 100644 >index 0000000000000000000000000000000000000000..0937086d72d011d81a380e31e97b5c6a0746f02d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-remote-origin-script-worker.sub.js >@@ -0,0 +1,4 @@ >+// Import a remote origin script. >+import('https://{{domains[www1]}}:{{ports[https][0]}}/workers/modules/resources/export-on-load-script.js') >+ .then(module => postMessage(module.importedModules)) >+ .catch(e => postMessage(['ERROR'])); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..cd321fe24606bb55f3be570e31740b99d6fbff47 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-worker.js >@@ -0,0 +1,2 @@ >+import('./export-on-load-script.js') >+ .then(module => postMessage(module.importedModules)); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/empty-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/empty-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..49ceb2648a93410bdd5ee53ef0e114146210741b >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/empty-worker.js >@@ -0,0 +1 @@ >+// Do nothing. >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/eval-dynamic-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/eval-dynamic-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..e92aff21a885536713141bd23a37733d5a66bfe2 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/eval-dynamic-import-worker.js >@@ -0,0 +1,3 @@ >+const code = "import('./export-on-load-script.js')" + >+ " .then(module => postMessage(module.importedModules));" >+eval(code); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-dynamic-import-script.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-dynamic-import-script.js >new file mode 100644 >index 0000000000000000000000000000000000000000..8d172c324d306d8e0792e3637be3fdfcdc354927 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-dynamic-import-script.js >@@ -0,0 +1,7 @@ >+// Export the list of imported modules. It's available after the |ready| promise >+// is resolved. >+export let importedModules = ['export-on-dynamic-import-script.js']; >+export let ready = import('./export-on-load-script.js') >+ .then(module => { >+ Array.prototype.push.apply(importedModules, module.importedModules); >+ }); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js >new file mode 100644 >index 0000000000000000000000000000000000000000..7d1b122c32259c0972556bb036be69b785351357 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js >@@ -0,0 +1 @@ >+export const importedModules = ['export-on-load-script.js']; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js.headers b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..cb762eff806849df46dc758ef7b98b63f27f54c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js.headers >@@ -0,0 +1 @@ >+Access-Control-Allow-Origin: * >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-static-import-script.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-static-import-script.js >new file mode 100644 >index 0000000000000000000000000000000000000000..3f7174eef0beb68a3f36d66d3ed7a73c9074955c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-static-import-script.js >@@ -0,0 +1,3 @@ >+import * as module from './export-on-load-script.js'; >+const filename = 'export-on-static-import-script.js'; >+export const importedModules = [filename].concat(module.importedModules); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-meta-url-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-meta-url-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..9d909778eda0e3a6082b6f93a8fabf36a82b9267 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-meta-url-worker.js >@@ -0,0 +1 @@ >+postMessage(import.meta.url); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-scripts-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-scripts-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..676cccb2ad7f6fc6c6a77474ca0683738db03983 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-scripts-worker.js >@@ -0,0 +1,15 @@ >+try { >+ importScripts('empty-worker.js'); >+ postMessage('LOADED'); >+} catch (e) { >+ // Post a message instead of propagating an ErrorEvent to the page because >+ // propagated event loses an error name. >+ // >+ // Step 1. "Let notHandled be the result of firing an event named error at the >+ // Worker object associated with the worker, using ErrorEvent, with the >+ // cancelable attribute initialized to true, the message, filename, lineno, >+ // and colno attributes initialized appropriately, and the error attribute >+ // initialized to null." >+ // https://html.spec.whatwg.org/multipage/workers.html#runtime-script-errors-2 >+ postMessage(e.name); >+} >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-dynamic-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-dynamic-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..5ae82f8aa054f8f3a61475994c4e658ba282c890 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-dynamic-import-worker.js >@@ -0,0 +1,5 @@ >+import('./export-on-dynamic-import-script.js') >+ .then(async module => { >+ await module.ready; >+ postMessage(module.importedModules); >+ }); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-static-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-static-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..72ab31cb1c6ef1b77f4de3610cde2e58e094669d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-static-import-worker.js >@@ -0,0 +1,2 @@ >+import * as module from './export-on-static-import-script.js'; >+postMessage(module.importedModules); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/new-worker-window.html b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/new-worker-window.html >new file mode 100644 >index 0000000000000000000000000000000000000000..5ae150725eb973ce1c2c7b54eb45669e057e8875 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/new-worker-window.html >@@ -0,0 +1,15 @@ >+<!DOCTYPE html> >+<title>DedicatedWorker: new Worker()</title> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script> >+let worker; >+ >+// Creates a new dedicated worker for a given script url. >+window.onmessage = e => { >+ worker = new Worker(e.data, { type: 'module' }); >+ worker.onmessage = msg => window.opener.postMessage(msg.data, '*'); >+ worker.onerror = err => window.opener.postMessage(['ERROR'], '*'); >+}; >+window.opener.postMessage('LOADED', '*'); >+</script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/post-message-on-load-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/post-message-on-load-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..93818ccad90c60547d724f8fdcdaf626b7301cb6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/post-message-on-load-worker.js >@@ -0,0 +1 @@ >+postMessage('LOADED'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-and-then-dynamic-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-and-then-dynamic-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..89125e0af7b0af62823628cb248a02c9b1d24343 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-and-then-dynamic-import-worker.js >@@ -0,0 +1,2 @@ >+import * as module from './export-on-dynamic-import-script.js'; >+module.ready.then(() => postMessage(module.importedModules)); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-non-existent-script-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-non-existent-script-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..16f70e9daf4909605746c6614a509afb3cf71ed1 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-non-existent-script-worker.js >@@ -0,0 +1 @@ >+import './non-existent-script.js'; >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-remote-origin-script-worker.sub.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-remote-origin-script-worker.sub.js >new file mode 100644 >index 0000000000000000000000000000000000000000..00ef44eff580f575621be2be250ea787b19a3200 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-remote-origin-script-worker.sub.js >@@ -0,0 +1,3 @@ >+// Import a remote origin script. >+import * as module from 'https://{{domains[www1]}}:{{ports[https][0]}}/workers/modules/resources/export-on-load-script.js'; >+postMessage(module.importedModules); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-worker.js >new file mode 100644 >index 0000000000000000000000000000000000000000..f0639153a94feaef8efa30feabf26752ba058853 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-worker.js >@@ -0,0 +1,2 @@ >+import * as module from './export-on-load-script.js'; >+postMessage(module.importedModules); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..10411109070672ed2688b194aa052a66aebb1fbf >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/w3c-import.log >@@ -0,0 +1,37 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/credentials.py >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-and-then-static-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-given-url-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-remote-origin-script-worker.sub.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/dynamic-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/empty-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/eval-dynamic-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-dynamic-import-script.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-load-script.js.headers >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/export-on-static-import-script.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-meta-url-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/import-scripts-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-dynamic-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/nested-static-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/new-worker-window.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/post-message-on-load-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-and-then-dynamic-import-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-non-existent-script-worker.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-remote-origin-script-worker.sub.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/resources/static-import-worker.js >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/modules/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/w3c-import.log >new file mode 100644 >index 0000000000000000000000000000000000000000..dbfd61a9e45235ee1cc3058b155c0e0bd5834555 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/modules/w3c-import.log >@@ -0,0 +1,23 @@ >+The tests in this directory were imported from the W3C repository. >+Do NOT modify these tests directly in WebKit. >+Instead, create a pull request on the WPT github: >+ https://github.com/w3c/web-platform-tests >+ >+Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport >+ >+Do NOT modify or remove this file. >+ >+------------------------------------------------------------------------ >+Properties requiring vendor prefixes: >+None >+Property values requiring vendor prefixes: >+None >+------------------------------------------------------------------------ >+List of files: >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-failure.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-meta.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-credentials.html.headers >+/LayoutTests/imported/w3c/web-platform-tests/workers/modules/dedicated-worker-options-type.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/name-property.html b/LayoutTests/imported/w3c/web-platform-tests/workers/name-property.html >index 939601e5e3615dfe085675d9aecd499463025b4f..ccc2a9de3a9c59acc19eefb247b1c92b78a52941 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/name-property.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/name-property.html >@@ -10,16 +10,21 @@ > > <script> > "use strict"; >+setup({explicit_done: true}); > >-const worker = new Worker("support/name.js", { name: "my name" }); >-fetch_tests_from_worker(worker); >+(async function() { >+ const worker = new Worker("support/name.js", { name: "my name" }); >+ await fetch_tests_from_worker(worker); > >-const worker2 = new Worker("support/name-as-accidental-global.js"); >-fetch_tests_from_worker(worker2); >+ const worker2 = new Worker("support/name-as-accidental-global.js"); >+ await fetch_tests_from_worker(worker2); > >-const sharedWorker = new SharedWorker("support/name.js", { name: "my name" }); >-fetch_tests_from_worker(sharedWorker); >+ const sharedWorker = new SharedWorker("support/name.js", { name: "my name" }); >+ await fetch_tests_from_worker(sharedWorker); > >-const sharedWorker2 = new SharedWorker("support/name-as-accidental-global.js"); >-fetch_tests_from_worker(sharedWorker2); >+ const sharedWorker2 = new SharedWorker("support/name-as-accidental-global.js"); >+ await fetch_tests_from_worker(sharedWorker2); >+ >+ done(); >+})(); > </script> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/nested_worker.worker.js b/LayoutTests/imported/w3c/web-platform-tests/workers/nested_worker.worker.js >index 8848fa216bc0059d444a7ec0eb223ca2d5ee1e5c..005b3c2f3039729eba2e30c52557d4310f0cebea 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/nested_worker.worker.js >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/nested_worker.worker.js >@@ -6,6 +6,6 @@ async_test(function() { > worker1.onmessage = this.step_func_done(function(evt) { > assert_equals(evt.data, "Pass"); > worker1.terminate(); >- done(); > }); > }, "Nested worker"); >+done(); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/opaque-origin.html b/LayoutTests/imported/w3c/web-platform-tests/workers/opaque-origin.html >index 0474b970c96f288229bc244c10f060e3feb33990..83574b456fec9d9867b15215b232384e6dae7f08 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/opaque-origin.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/opaque-origin.html >@@ -11,6 +11,7 @@ onmessage = e => { > channel.port2.postMessage(e.data); > }; > fetch_tests_from_worker(channel.port1); >+channel.port1.start(); > </script> > <iframe sandbox="allow-scripts" src="support/sandboxed-tests.html?pipe=sub"></iframe> > </body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/structured-clone/dedicated-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/structured-clone/dedicated-expected.txt >index 57b71d41661e56a4538c4aaf9e0d9657173cddff..56183649f60520a1de2b7486d207fe5f9ea79e0a 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/structured-clone/dedicated-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/structured-clone/dedicated-expected.txt >@@ -85,7 +85,7 @@ PASS Object Blob object, Blob unpaired low surrogate (invalid utf-8) > PASS Object Blob object, Blob paired surrogates (invalid utf-8) > PASS Object Blob object, Blob empty > PASS Object Blob object, Blob NUL >-PASS File basic >+FAIL File basic assert_equals: lastModified expected 42 but got 1528231071111 > PASS FileList empty > PASS Array FileList object, FileList empty > PASS Object FileList object, FileList empty >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerSendingPerformanceNow.js b/LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerSendingPerformanceNow.js >new file mode 100644 >index 0000000000000000000000000000000000000000..ac12190efe3af9b3e7cf36f309b12d6b6ddcc49d >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerSendingPerformanceNow.js >@@ -0,0 +1,22 @@ >+function calcResponse() { >+ const response = [ >+ typeof(workerStart), >+ typeof(performance), >+ typeof(performance.now), >+ performance.now() >+ ]; >+ return response; >+} >+ >+self.onmessage = function(event) { >+ postMessage(calcResponse()); >+ self.close(); >+} >+ >+self.addEventListener("connect", function(event) { >+ const port = event.ports[0]; >+ port.onmessage = function(event) { >+ port.postMessage(calcResponse()); >+ port.close(); >+ }; >+}); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/support/iframe_sw_dataUrl.html b/LayoutTests/imported/w3c/web-platform-tests/workers/support/iframe_sw_dataUrl.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0fb0ec228079de8dd15626fb3161b53d48c68112 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/support/iframe_sw_dataUrl.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<title>Iframe for Shared Worker: Data URL cross-origin checks</title> >+<body> >+<script> >+ >+let worker = new SharedWorker('data:text/javascript,let conns=0; onconnect = e => { e.ports[0].postMessage(++conns); }'); >+worker.port.onmessage = e => { >+ parent.postMessage(e.data, '*'); >+} >+ >+</script> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/support/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/support/w3c-import.log >index d04b94e05f0805af616d970b257b0c15a74c1c5f..5cf0afa04444d3d30bdfce2e1255c197cd27633e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/support/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/support/w3c-import.log >@@ -27,8 +27,10 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerLocation-origin.html > /LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerLocation.js > /LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerNavigator.js >+/LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerSendingPerformanceNow.js > /LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerTerminate.js > /LayoutTests/imported/w3c/web-platform-tests/workers/support/WorkerText.txt >+/LayoutTests/imported/w3c/web-platform-tests/workers/support/iframe_sw_dataUrl.html > /LayoutTests/imported/w3c/web-platform-tests/workers/support/name-as-accidental-global.js > /LayoutTests/imported/w3c/web-platform-tests/workers/support/name.js > /LayoutTests/imported/w3c/web-platform-tests/workers/support/nosiniff-error-worker.py >diff --git a/LayoutTests/imported/w3c/web-platform-tests/workers/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/workers/w3c-import.log >index b1130e1752afee360acd1de62c7011754841479e..589509e0ba4157c5f6e770ec99514376ac09125e 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/workers/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/workers/w3c-import.log >@@ -16,7 +16,9 @@ None > List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/OWNERS > /LayoutTests/imported/w3c/web-platform-tests/workers/README.md >+/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorkerPerformanceNow.html > /LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_blobUrl.html >+/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl.html > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_ErrorEvent_colno.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_ErrorEvent_filename.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_ErrorEvent_lineno.htm >@@ -25,6 +27,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_importScripts.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_importScripts_NetworkErr.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_importScripts_NosniffErr.htm >+/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_requestAnimationFrame.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_setInterval.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerGlobalScope_setTimeout.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerLocation-origin.sub.window.js >@@ -47,6 +50,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerNavigator_onLine.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerNavigator_platform.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/WorkerNavigator_userAgent.htm >+/LayoutTests/imported/w3c/web-platform-tests/workers/WorkerPerformanceNow.html > /LayoutTests/imported/w3c/web-platform-tests/workers/Worker_ErrorEvent_bubbles_cancelable.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/Worker_ErrorEvent_error.htm > /LayoutTests/imported/w3c/web-platform-tests/workers/Worker_ErrorEvent_filename.htm >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt >index 037f0956f5d4536ef735ff168015d219d3020a50..83e84a9e7655474aa29d1ad446ce0a17f143b497 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker-expected.txt >@@ -1,394 +1,17 @@ >- >-PASS Bad algorithm: generateKey(AES, false, [decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey(AES, false, [sign]) >-PASS Bad algorithm: generateKey(AES, true, [sign]) >-PASS Bad algorithm: generateKey(AES, RED, [sign]) >-PASS Bad algorithm: generateKey(AES, 7, [sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey(AES, false, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) >-PASS Bad algorithm: generateKey(AES, false, []) >-PASS Bad algorithm: generateKey(AES, true, []) >-PASS Bad algorithm: generateKey(AES, RED, []) >-PASS Bad algorithm: generateKey(AES, 7, []) >-PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, false, []) >-PASS Bad algorithm: generateKey({name: AES}, true, []) >-PASS Bad algorithm: generateKey({name: AES}, RED, []) >-PASS Bad algorithm: generateKey({name: AES}, 7, []) >-PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) >-PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [verify, sign]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, []) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, false, [sign, verify, sign, sign, verify]) >-PASS Bad algorithm property: generateKey({hash: SHA-256, modulusLength: 1024, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 0}}, true, [sign, verify, sign, sign, verify]) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) >-PASS Empty usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 640: "tests/WebCryptoAPI/generateKey/failures_RSA-PSS.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt >index 9cd26079b0c9484e30c3bcfba7d860539d9eab1d..e6b7610a65fe553c4550a653dcfd60718cad8254 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker-expected.txt >@@ -1,38 +1,17 @@ >- >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-1, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, verify, sign, sign, verify]) >-PASS Success: generateKey({hash: SHA-256, modulusLength: 2048, name: Rsa-pss, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify]) >- >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x579 >+ RenderBlock {PRE} at (0,0) size 784x150 >+ RenderText {#text} at (0,0) size 773x150 >+ text run at (0,0) width 508: "{\"error\": {\"message\": \"Traceback (most recent call last):\\n File" >+ text run at (0,15) width 508: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,30) width 742: "tests/tools/wptserve/wptserve/handlers.py\\\", line 254, in __call__\\n rv = self.func(request," >+ text run at (0,45) width 648: "response)\\n File \\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,60) width 531: "tests/tools/serve/serve.py\\\", line 58, in handle_request\\n meta =" >+ text run at (0,75) width 352: "\\\"\\\\n\\\".join(self._get_meta(request))\\n File" >+ text run at (0,90) width 773: "\\\"/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-tests/tools/serve/serve.py\\\", line" >+ text run at (0,105) width 765: "93, in _get_meta\\n with open(path, \\\"rb\\\") as f:\\nIOError: [Errno 2] No such file or directory:" >+ text run at (0,120) width 500: "'/Users/bmac/code/webkit3/LayoutTests/imported/w3c/web-platform-" >+ text run at (0,135) width 648: "tests/WebCryptoAPI/generateKey/successes_RSA-PSS.https.worker.js'\\n\", \"code\": 500}}" >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/beacon/headers/header-content-type-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/beacon/headers/header-content-type-expected.txt >index 60ee6e5eac9398982e63cc40a81e3f6f626c754a..3d8e9dc55d8ab8f3c81f784e926eb2b296709fb2 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/beacon/headers/header-content-type-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/beacon/headers/header-content-type-expected.txt >@@ -1,8 +1,10 @@ > >-PASS Test content-type header for a body string >-PASS Test content-type header for a body ArrayBufferView >-PASS Test content-type header for a body ArrayBuffer >-PASS Test content-type header for a body Blob >-PASS Test content-type header for a body FormData >-PASS Test content-type header for a body URLSearchParams >+Harness Error (TIMEOUT), message = null >+ >+TIMEOUT Test content-type header for a body string Test timed out >+NOTRUN Test content-type header for a body ArrayBufferView >+NOTRUN Test content-type header for a body ArrayBuffer >+NOTRUN Test content-type header for a body Blob >+NOTRUN Test content-type header for a body FormData >+NOTRUN Test content-type header for a body URLSearchParams > >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-expected.txt >index d59152b747a2f5f17cd7162e75ed9970c1a4f18b..b314bac7ecc3321904af572f617f4de0cce71848 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-expected.txt >@@ -7,8 +7,8 @@ FAIL background-color supports animating as color of #RGBa assert_equals: The va > FAIL background-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL background-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS background-image (type: discrete) has testAccumulation function >-PASS background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-bottom-color (type: color) has testAccumulation function > FAIL border-bottom-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-bottom-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -17,8 +17,8 @@ FAIL border-bottom-color supports animating as color of #RGBa assert_equals: The > FAIL border-bottom-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-bottom-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-bottom-width (type: length) has testAccumulation function >-FAIL border-bottom-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-bottom-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-bottom-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-bottom-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-image-outset (type: discrete) has testAccumulation function > PASS border-image-outset: "5 6 7 8" onto "1 2 3 4" > PASS border-image-outset: "1 2 3 4" onto "5 6 7 8" >@@ -26,8 +26,8 @@ PASS border-image-slice (type: discrete) has testAccumulation function > PASS border-image-slice: "5 6 7 8" onto "1 2 3 4" > PASS border-image-slice: "1 2 3 4" onto "5 6 7 8" > PASS border-image-source (type: discrete) has testAccumulation function >-PASS border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-image-width (type: discrete) has testAccumulation function > PASS border-image-width: "5 6 7 8" onto "1 2 3 4" > PASS border-image-width: "1 2 3 4" onto "5 6 7 8" >@@ -39,8 +39,8 @@ FAIL border-left-color supports animating as color of #RGBa assert_equals: The v > FAIL border-left-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-left-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-left-width (type: length) has testAccumulation function >-FAIL border-left-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-left-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-left-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-left-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-right-color (type: color) has testAccumulation function > FAIL border-right-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-right-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -49,11 +49,11 @@ FAIL border-right-color supports animating as color of #RGBa assert_equals: The > FAIL border-right-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-right-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-right-width (type: length) has testAccumulation function >-FAIL border-right-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-right-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-right-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-right-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-spacing (type: lengthPair) has testAccumulation function > FAIL border-spacing: length pair assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "10px 10px" >-FAIL border-spacing: length pair of rem assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "10px 10px" >+FAIL border-spacing: length pair of rem assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "1px 1px" > PASS border-top-color (type: color) has testAccumulation function > FAIL border-top-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-top-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -62,8 +62,8 @@ FAIL border-top-color supports animating as color of #RGBa assert_equals: The va > FAIL border-top-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-top-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-top-width (type: length) has testAccumulation function >-FAIL border-top-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-top-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-top-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-top-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS box-shadow (type: boxShadowList) has testAccumulation function > FAIL box-shadow: shadow assert_equals: The value should be rgb(240, 240, 240) 20px 20px 20px 20px at 0ms expected "rgb(240, 240, 240) 20px 20px 20px 20px" but got "rgb(120, 120, 120) 10px 10px 10px 10px" > PASS caret-color (type: color) has testAccumulation function >@@ -94,7 +94,7 @@ PASS column-count: "10" onto "auto" > FAIL column-count: "auto" onto "10" assert_equals: The value should be auto at 0ms expected "auto" but got "0" > PASS column-gap (type: length) has testAccumulation function > FAIL column-gap: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-gap: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-gap: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS column-gap (type: discrete) has testAccumulation function > PASS column-gap: "200px" onto "normal" > PASS column-gap: "normal" onto "200px" >@@ -106,11 +106,11 @@ FAIL column-rule-color supports animating as color of #RGBa assert_equals: The v > FAIL column-rule-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL column-rule-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS column-rule-width (type: length) has testAccumulation function >-FAIL column-rule-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-rule-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-rule-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL column-rule-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS column-width (type: length) has testAccumulation function > FAIL column-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS column-width (type: discrete) has testAccumulation function > PASS column-width: "1px" onto "auto" > FAIL column-width: "auto" onto "1px" assert_equals: The value should be auto at 0ms expected "auto" but got "0px" >@@ -136,15 +136,15 @@ PASS font-style (type: discrete) has testAccumulation function > PASS font-style: "oblique" onto "italic" > FAIL font-style: "italic" onto "oblique" assert_equals: The value should be italic at 0ms expected "italic" but got "oblique" > PASS font-variation-settings (type: fontVariationSettings) has testAccumulation function >-FAIL font-variation-settings with composite type accumulate assert_equals: The value should be "wght" 2.2 at 250ms expected "\"wght\" 2.2" but got "\"wght\" 1.2" >+FAIL font-variation-settings with composite type accumulate assert_equals: The value should be "wght" 2.2 at 250ms expected "\"wght\" 2.2" but got "'wght' 1.2" > PASS font-variation-settings (type: discrete) has testAccumulation function >-PASS font-variation-settings: ""wdth" 5" onto ""wght" 1.1, "wdth" 1" >-PASS font-variation-settings: ""wght" 1.1, "wdth" 1" onto ""wdth" 5" >+FAIL font-variation-settings: ""wdth" 5" onto ""wght" 1.1, "wdth" 1" assert_equals: The value should be "wdth" 5 at 0ms expected "\"wdth\" 5" but got "'wdth' 5" >+FAIL font-variation-settings: ""wght" 1.1, "wdth" 1" onto ""wdth" 5" assert_equals: The value should be "wght" 1.1, "wdth" 1 at 0ms expected "\"wght\" 1.1, \"wdth\" 1" but got "'wght' 1.1, 'wdth' 1" > PASS font-variation-settings: "normal" onto ""wdth" 5" >-PASS font-variation-settings: ""wdth" 5" onto "normal" >+FAIL font-variation-settings: ""wdth" 5" onto "normal" assert_equals: The value should be "wdth" 5 at 0ms expected "\"wdth\" 5" but got "'wdth' 5" > PASS letter-spacing (type: length) has testAccumulation function > FAIL letter-spacing: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL letter-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL letter-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS lighting-color (type: color) has testAccumulation function > FAIL lighting-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL lighting-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -153,8 +153,8 @@ FAIL lighting-color supports animating as color of #RGBa assert_equals: The valu > FAIL lighting-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL lighting-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS list-style-image (type: discrete) has testAccumulation function >-PASS list-style-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS list-style-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL list-style-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL list-style-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS outline-color (type: color) has testAccumulation function > FAIL outline-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL outline-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -166,14 +166,14 @@ PASS outline-offset (type: length) has testAccumulation function > FAIL outline-offset: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > FAIL outline-offset: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS outline-width (type: length) has testAccumulation function >-FAIL outline-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL outline-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL outline-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL outline-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS perspective (type: length) has testAccumulation function > FAIL perspective: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL perspective: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL perspective: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS shape-outside (type: discrete) has testAccumulation function >-PASS shape-outside: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS shape-outside: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL shape-outside: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL shape-outside: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS stop-color (type: color) has testAccumulation function > FAIL stop-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL stop-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -218,14 +218,14 @@ FAIL visibility: onto "visible" assert_equals: The value should be visible at 10 > PASS visibility: onto "hidden" > PASS word-spacing (type: lengthPercentageOrCalc) has testAccumulation function > FAIL word-spacing: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL word-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL word-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > FAIL word-spacing: percentage assert_equals: The value should be 130% at 0ms expected "130%" but got "1.75px" > FAIL word-spacing: units "%" onto "px" assert_equals: The value should be calc(10px + 10%) at 0ms expected "calc(10px + 10%)" but got "0.25px" > FAIL word-spacing: units "px" onto "%" assert_equals: The value should be calc(10px + 10%) at 0ms expected "calc(10px + 10%)" but got "10px" >-FAIL word-spacing: units "rem" onto "%" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "20px" >+FAIL word-spacing: units "rem" onto "%" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "2px" > FAIL word-spacing: units "%" onto "rem" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "0.25px" >-FAIL word-spacing: units "rem" onto "em" assert_equals: The value should be 40px at 0ms expected "40px" but got "20px" >-FAIL word-spacing: units "em" onto "rem" assert_equals: The value should be 40px at 0ms expected "40px" but got "20px" >-FAIL word-spacing: units "calc" onto "px" assert_equals: The value should be calc(30px + 20%) at 0ms expected "calc(30px + 20%)" but got "10px" >+FAIL word-spacing: units "rem" onto "em" assert_equals: The value should be 40px at 0ms expected "40px" but got "2px" >+FAIL word-spacing: units "em" onto "rem" assert_equals: The value should be 40px at 0ms expected "40px" but got "0px" >+FAIL word-spacing: units "calc" onto "px" assert_equals: The value should be calc(30px + 20%) at 0ms expected "calc(30px + 20%)" but got "0px" > FAIL word-spacing: calc assert_equals: The value should be calc(30px + 30%) at 0ms expected "calc(30px + 30%)" but got "0px" > >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-expected.txt >index d2e681379320e15ac51818b07df097bfa6995476..986f9c33388131b881dfee3240e94a32d11d7eac 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/addition-per-property-expected.txt >@@ -7,8 +7,8 @@ FAIL background-color supports animating as color of #RGBa assert_equals: The va > FAIL background-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL background-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS background-image (type: discrete) has testAddition function >-PASS background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL background-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL background-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-bottom-color (type: color) has testAddition function > FAIL border-bottom-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-bottom-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -17,8 +17,8 @@ FAIL border-bottom-color supports animating as color of #RGBa assert_equals: The > FAIL border-bottom-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-bottom-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-bottom-width (type: length) has testAddition function >-FAIL border-bottom-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-bottom-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-bottom-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-bottom-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-image-outset (type: discrete) has testAddition function > PASS border-image-outset: "5 6 7 8" onto "1 2 3 4" > PASS border-image-outset: "1 2 3 4" onto "5 6 7 8" >@@ -26,8 +26,8 @@ PASS border-image-slice (type: discrete) has testAddition function > PASS border-image-slice: "5 6 7 8" onto "1 2 3 4" > PASS border-image-slice: "1 2 3 4" onto "5 6 7 8" > PASS border-image-source (type: discrete) has testAddition function >-PASS border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL border-image-source: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL border-image-source: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-image-width (type: discrete) has testAddition function > PASS border-image-width: "5 6 7 8" onto "1 2 3 4" > PASS border-image-width: "1 2 3 4" onto "5 6 7 8" >@@ -39,8 +39,8 @@ FAIL border-left-color supports animating as color of #RGBa assert_equals: The v > FAIL border-left-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-left-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-left-width (type: length) has testAddition function >-FAIL border-left-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-left-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-left-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-left-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-right-color (type: color) has testAddition function > FAIL border-right-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-right-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -49,11 +49,11 @@ FAIL border-right-color supports animating as color of #RGBa assert_equals: The > FAIL border-right-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-right-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-right-width (type: length) has testAddition function >-FAIL border-right-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-right-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-right-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-right-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS border-spacing (type: lengthPair) has testAddition function > FAIL border-spacing: length pair assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "10px 10px" >-FAIL border-spacing: length pair of rem assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "10px 10px" >+FAIL border-spacing: length pair of rem assert_equals: The value should be 20px 20px at 0ms expected "20px 20px" but got "1px 1px" > PASS border-top-color (type: color) has testAddition function > FAIL border-top-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL border-top-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -62,8 +62,8 @@ FAIL border-top-color supports animating as color of #RGBa assert_equals: The va > FAIL border-top-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL border-top-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS border-top-width (type: length) has testAddition function >-FAIL border-top-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL border-top-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL border-top-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL border-top-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS box-shadow (type: boxShadowList) has testAddition function > FAIL box-shadow: shadow assert_equals: The value should be rgb(0, 0, 0) 0px 0px 0px 0px, rgb(120, 120, 120) 10px 10px 10px 0px at 0ms expected "rgb(0, 0, 0) 0px 0px 0px 0px, rgb(120, 120, 120) 10px 10px 10px 0px" but got "rgb(120, 120, 120) 10px 10px 10px 0px" > PASS caret-color (type: color) has testAddition function >@@ -94,7 +94,7 @@ PASS column-count: "10" onto "auto" > FAIL column-count: "auto" onto "10" assert_equals: The value should be auto at 0ms expected "auto" but got "0" > PASS column-gap (type: length) has testAddition function > FAIL column-gap: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-gap: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-gap: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS column-gap (type: discrete) has testAddition function > PASS column-gap: "200px" onto "normal" > PASS column-gap: "normal" onto "200px" >@@ -106,11 +106,11 @@ FAIL column-rule-color supports animating as color of #RGBa assert_equals: The v > FAIL column-rule-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL column-rule-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS column-rule-width (type: length) has testAddition function >-FAIL column-rule-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-rule-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-rule-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL column-rule-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS column-width (type: length) has testAddition function > FAIL column-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL column-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL column-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS column-width (type: discrete) has testAddition function > PASS column-width: "1px" onto "auto" > FAIL column-width: "auto" onto "1px" assert_equals: The value should be auto at 0ms expected "auto" but got "0px" >@@ -136,15 +136,15 @@ PASS font-style (type: discrete) has testAddition function > PASS font-style: "oblique" onto "italic" > FAIL font-style: "italic" onto "oblique" assert_equals: The value should be italic at 0ms expected "italic" but got "oblique" > PASS font-variation-settings (type: fontVariationSettings) has testAddition function >-FAIL font-variation-settings with composite type add assert_equals: The value should be "wght" 2.2 at 250ms expected "\"wght\" 2.2" but got "\"wght\" 1.2" >+FAIL font-variation-settings with composite type add assert_equals: The value should be "wght" 2.2 at 250ms expected "\"wght\" 2.2" but got "'wght' 1.2" > PASS font-variation-settings (type: discrete) has testAddition function >-PASS font-variation-settings: ""wdth" 5" onto ""wght" 1.1, "wdth" 1" >-PASS font-variation-settings: ""wght" 1.1, "wdth" 1" onto ""wdth" 5" >+FAIL font-variation-settings: ""wdth" 5" onto ""wght" 1.1, "wdth" 1" assert_equals: The value should be "wdth" 5 at 0ms expected "\"wdth\" 5" but got "'wdth' 5" >+FAIL font-variation-settings: ""wght" 1.1, "wdth" 1" onto ""wdth" 5" assert_equals: The value should be "wght" 1.1, "wdth" 1 at 0ms expected "\"wght\" 1.1, \"wdth\" 1" but got "'wght' 1.1, 'wdth' 1" > PASS font-variation-settings: "normal" onto ""wdth" 5" >-PASS font-variation-settings: ""wdth" 5" onto "normal" >+FAIL font-variation-settings: ""wdth" 5" onto "normal" assert_equals: The value should be "wdth" 5 at 0ms expected "\"wdth\" 5" but got "'wdth' 5" > PASS letter-spacing (type: length) has testAddition function > FAIL letter-spacing: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL letter-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL letter-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS lighting-color (type: color) has testAddition function > FAIL lighting-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL lighting-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -153,8 +153,8 @@ FAIL lighting-color supports animating as color of #RGBa assert_equals: The valu > FAIL lighting-color supports animating as color of rgba() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > FAIL lighting-color supports animating as color of hsla() assert_equals: The value should be rgb(230, 128, 128) at 0ms expected "rgb(230, 128, 128)" but got "rgba(255, 0, 0, 0.4)" > PASS list-style-image (type: discrete) has testAddition function >-PASS list-style-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS list-style-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL list-style-image: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL list-style-image: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS outline-color (type: color) has testAddition function > FAIL outline-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL outline-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -166,14 +166,14 @@ PASS outline-offset (type: length) has testAddition function > FAIL outline-offset: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > FAIL outline-offset: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS outline-width (type: length) has testAddition function >-FAIL outline-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL outline-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL outline-width: length assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" >+FAIL outline-width: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "0px" > PASS perspective (type: length) has testAddition function > FAIL perspective: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL perspective: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL perspective: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > PASS shape-outside (type: discrete) has testAddition function >-PASS shape-outside: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" >-PASS shape-outside: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" >+FAIL shape-outside: "url("http://localhost/test-2")" onto "url("http://localhost/test-1")" assert_equals: The value should be url("http://localhost/test-2") at 0ms expected "url(\"http://localhost/test-2\")" but got "url(http://localhost/test-2)" >+FAIL shape-outside: "url("http://localhost/test-1")" onto "url("http://localhost/test-2")" assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS stop-color (type: color) has testAddition function > FAIL stop-color supports animating as color of rgb() with overflowed from and to values assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" > FAIL stop-color supports animating as color of #RGB assert_equals: The value should be rgb(255, 128, 128) at 0ms expected "rgb(255, 128, 128)" but got "rgb(255, 0, 0)" >@@ -214,14 +214,14 @@ FAIL visibility: onto "visible" assert_equals: The value should be visible at 10 > PASS visibility: onto "hidden" > PASS word-spacing (type: lengthPercentageOrCalc) has testAddition function > FAIL word-spacing: length assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >-FAIL word-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "10px" >+FAIL word-spacing: length of rem assert_equals: The value should be 20px at 0ms expected "20px" but got "1px" > FAIL word-spacing: percentage assert_equals: The value should be 130% at 0ms expected "130%" but got "1.75px" > FAIL word-spacing: units "%" onto "px" assert_equals: The value should be calc(10px + 10%) at 0ms expected "calc(10px + 10%)" but got "0.25px" > FAIL word-spacing: units "px" onto "%" assert_equals: The value should be calc(10px + 10%) at 0ms expected "calc(10px + 10%)" but got "10px" >-FAIL word-spacing: units "rem" onto "%" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "20px" >+FAIL word-spacing: units "rem" onto "%" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "2px" > FAIL word-spacing: units "%" onto "rem" assert_equals: The value should be calc(20px + 10%) at 0ms expected "calc(20px + 10%)" but got "0.25px" >-FAIL word-spacing: units "rem" onto "em" assert_equals: The value should be 40px at 0ms expected "40px" but got "20px" >-FAIL word-spacing: units "em" onto "rem" assert_equals: The value should be 40px at 0ms expected "40px" but got "20px" >-FAIL word-spacing: units "calc" onto "px" assert_equals: The value should be calc(30px + 20%) at 0ms expected "calc(30px + 20%)" but got "10px" >+FAIL word-spacing: units "rem" onto "em" assert_equals: The value should be 40px at 0ms expected "40px" but got "2px" >+FAIL word-spacing: units "em" onto "rem" assert_equals: The value should be 40px at 0ms expected "40px" but got "0px" >+FAIL word-spacing: units "calc" onto "px" assert_equals: The value should be calc(30px + 20%) at 0ms expected "calc(30px + 20%)" but got "0px" > FAIL word-spacing: calc assert_equals: The value should be calc(30px + 30%) at 0ms expected "calc(30px + 30%)" but got "0px" > >diff --git a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt >index 90af75fac59266365bcd7080524a794b437a509f..3eaa84875ffb65ce4ce7335947888a39a502145e 100644 >--- a/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt >+++ b/LayoutTests/platform/mac/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/interpolation-per-property-expected.txt >@@ -7,9 +7,9 @@ PASS background-color supports animating as color of #RGBa > PASS background-color supports animating as color of rgba() > PASS background-color supports animating as color of hsla() > PASS background-image (type: discrete) has testInterpolation function >-FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 499ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >+FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL background-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-bottom-color (type: color) has testInterpolation function > PASS border-bottom-color supports animating as color of rgb() > PASS border-bottom-color supports animating as color of #RGB >@@ -18,8 +18,8 @@ PASS border-bottom-color supports animating as color of #RGBa > PASS border-bottom-color supports animating as color of rgba() > PASS border-bottom-color supports animating as color of hsla() > PASS border-bottom-width (type: length) has testInterpolation function >-PASS border-bottom-width supports animating as a length >-PASS border-bottom-width supports animating as a length of rem >+FAIL border-bottom-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL border-bottom-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS border-image-outset (type: discrete) has testInterpolation function > FAIL border-image-outset uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with linear easing assert_equals: The value should be 1 2 3 4 at 499ms expected "1 2 3 4" but got "2.996000051498413 3.996000051498413 4.995999813079834 5.995999813079834" > FAIL border-image-outset uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with effect easing assert_equals: The value should be 1 2 3 4 at 940ms expected "1 2 3 4" but got "2.711512804031372 3.711512804031372 4.711513042449951 5.711513042449951" >@@ -29,9 +29,9 @@ FAIL border-image-slice uses discrete animation when animating between "1 2 3 4" > FAIL border-image-slice uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with effect easing assert_equals: The value should be 1 2 3 4 at 940ms expected "1 2 3 4" but got "2.711512804031372 3.711512804031372 4.711513042449951 5.711513042449951" > FAIL border-image-slice uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with keyframe easing assert_equals: The value should be 1 2 3 4 at 940ms expected "1 2 3 4" but got "2.711512804031372 3.711512804031372 4.711513042449951 5.711513042449951" > PASS border-image-source (type: discrete) has testInterpolation function >-FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 499ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >+FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL border-image-source uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS border-image-width (type: discrete) has testInterpolation function > FAIL border-image-width uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with linear easing assert_equals: The value should be 1 2 3 4 at 499ms expected "1 2 3 4" but got "2.996000051498413 3.996000051498413 4.995999813079834 5.995999813079834" > FAIL border-image-width uses discrete animation when animating between "1 2 3 4" and "5 6 7 8" with effect easing assert_equals: The value should be 1 2 3 4 at 940ms expected "1 2 3 4" but got "2.711512804031372 3.711512804031372 4.711513042449951 5.711513042449951" >@@ -44,8 +44,8 @@ PASS border-left-color supports animating as color of #RGBa > PASS border-left-color supports animating as color of rgba() > PASS border-left-color supports animating as color of hsla() > PASS border-left-width (type: length) has testInterpolation function >-PASS border-left-width supports animating as a length >-PASS border-left-width supports animating as a length of rem >+FAIL border-left-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL border-left-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS border-right-color (type: color) has testInterpolation function > PASS border-right-color supports animating as color of rgb() > PASS border-right-color supports animating as color of #RGB >@@ -54,11 +54,11 @@ PASS border-right-color supports animating as color of #RGBa > PASS border-right-color supports animating as color of rgba() > PASS border-right-color supports animating as color of hsla() > PASS border-right-width (type: length) has testInterpolation function >-PASS border-right-width supports animating as a length >-PASS border-right-width supports animating as a length of rem >+FAIL border-right-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL border-right-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS border-spacing (type: lengthPair) has testInterpolation function > PASS border-spacing supports animating as a length pair >-PASS border-spacing supports animating as a length pair of rem >+FAIL border-spacing supports animating as a length pair of rem assert_equals: The value should be 30px 30px at 500ms expected "30px 30px" but got "3px 3px" > PASS border-top-color (type: color) has testInterpolation function > PASS border-top-color supports animating as color of rgb() > PASS border-top-color supports animating as color of #RGB >@@ -67,8 +67,8 @@ PASS border-top-color supports animating as color of #RGBa > PASS border-top-color supports animating as color of rgba() > PASS border-top-color supports animating as color of hsla() > PASS border-top-width (type: length) has testInterpolation function >-PASS border-top-width supports animating as a length >-PASS border-top-width supports animating as a length of rem >+FAIL border-top-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL border-top-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS box-shadow (type: boxShadowList) has testInterpolation function > FAIL box-shadow: from none to other assert_equals: The value should be rgba(100, 100, 100, 0.5) 5px 5px 5px 0px at 500ms expected "rgba(100, 100, 100, 0.5) 5px 5px 5px 0px" but got "rgba(100, 100, 100, 0.501961) 5px 5px 5px 0px" > FAIL box-shadow: from other to none assert_equals: The value should be rgba(100, 100, 100, 0.5) 5px 5px 5px 0px at 500ms expected "rgba(100, 100, 100, 0.5) 5px 5px 5px 0px" but got "rgba(100, 100, 100, 0.501961) 5px 5px 5px 0px" >@@ -76,7 +76,7 @@ PASS box-shadow: single shadow > PASS box-shadow: shadow list > FAIL box-shadow: mismatched list length (from shorter to longer) assert_equals: The value should be rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.5) 5px 5px 5px 0px at 500ms expected "rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.5) 5px 5px 5px 0px" but got "rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.501961) 5px 5px 5px 0px" > FAIL box-shadow: mismatched list length (from longer to shorter) assert_equals: The value should be rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.5) 5px 5px 5px 0px at 500ms expected "rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.5) 5px 5px 5px 0px" but got "rgb(150, 150, 150) 15px 15px 15px 10px, rgba(100, 100, 100, 0.501961) 5px 5px 5px 0px" >-PASS box-shadow: with currentcolor >+FAIL box-shadow: with currentcolor assert_equals: The value should be rgb(0, 255, 0) 5px 5px 5px 5px at 500ms expected "rgb(0, 255, 0) 5px 5px 5px 5px" but got "rgb(0, 0, 0) 5px 5px 5px 5px" > PASS caret-color (type: color) has testInterpolation function > PASS caret-color supports animating as color of rgb() > PASS caret-color supports animating as color of #RGB >@@ -108,7 +108,7 @@ FAIL column-count uses discrete animation when animating between "auto" and "10" > FAIL column-count uses discrete animation when animating between "auto" and "10" with keyframe easing assert_equals: The value should be auto at 0ms expected "auto" but got "0" > PASS column-gap (type: length) has testInterpolation function > PASS column-gap supports animating as a length >-PASS column-gap supports animating as a length of rem >+FAIL column-gap supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "3px" > PASS column-gap (type: discrete) has testInterpolation function > FAIL column-gap uses discrete animation when animating between "normal" and "200px" with linear easing assert_equals: The value should be normal at 0ms expected "normal" but got "200px" > FAIL column-gap uses discrete animation when animating between "normal" and "200px" with effect easing assert_equals: The value should be normal at 0ms expected "normal" but got "200px" >@@ -121,11 +121,11 @@ PASS column-rule-color supports animating as color of #RGBa > PASS column-rule-color supports animating as color of rgba() > PASS column-rule-color supports animating as color of hsla() > PASS column-rule-width (type: length) has testInterpolation function >-PASS column-rule-width supports animating as a length >-PASS column-rule-width supports animating as a length of rem >+FAIL column-rule-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL column-rule-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS column-width (type: length) has testInterpolation function > PASS column-width supports animating as a length >-PASS column-width supports animating as a length of rem >+FAIL column-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "3px" > PASS column-width (type: discrete) has testInterpolation function > FAIL column-width uses discrete animation when animating between "auto" and "1px" with linear easing assert_equals: The value should be auto at 0ms expected "auto" but got "0px" > FAIL column-width uses discrete animation when animating between "auto" and "1px" with effect easing assert_equals: The value should be auto at 0ms expected "auto" but got "0px" >@@ -143,7 +143,7 @@ FAIL filter: interpolate different length of filter-function-list with function > FAIL filter: interpolate different length of filter-function-list with function which lacuna value is 0 assert_equals: The value should be opacity(0.5) grayscale(0.5) invert(0.5) sepia(0.5) blur(5px) at 500ms expected "opacity(0.5) grayscale(0.5) invert(0.5) sepia(0.5) blur(5px)" but got "opacity(0.25) grayscale(0.75) invert(0.75) sepia(0.75) blur(7.5px)" > FAIL filter: interpolate different length of filter-function-list with drop-shadow function assert_equals: The value should be blur(5px) drop-shadow(rgba(85, 0, 170, 0.6) 5px 5px 5px at 500ms expected "blur(5px) drop-shadow(rgba(85, 0, 170, 0.6) 5px 5px 5px" but got "blur(10px) drop-shadow(rgba(0, 0, 255, 0.8) 10px 10px 10px)" > PASS filter: interpolate from none >-FAIL filter: url function (interpoalte as discrete) assert_equals: The value should be blur(0px) url("#f1") at 499ms expected "blur(0px) url(\"#f1\")" but got "blur(4.989999771118164px) url(\"#f1\")" >+FAIL filter: url function (interpoalte as discrete) assert_equals: The value should be blur(0px) url("#f1") at 499ms expected "blur(0px) url(\"#f1\")" but got "blur(4.989999771118164px) url(#f1)" > PASS flood-color (type: color) has testInterpolation function > PASS flood-color supports animating as color of rgb() > PASS flood-color supports animating as color of #RGB >@@ -161,8 +161,8 @@ FAIL font-style uses discrete animation when animating between "italic" and "obl > FAIL font-style uses discrete animation when animating between "italic" and "oblique" with effect easing assert_equals: The value should be italic at 0ms expected "italic" but got "oblique" > FAIL font-style uses discrete animation when animating between "italic" and "oblique" with keyframe easing assert_equals: The value should be italic at 0ms expected "italic" but got "oblique" > PASS font-variation-settings (type: fontVariationSettings) has testInterpolation function >-PASS font-variation-settings supports animation as float >-PASS font-variation-settings supports animation as float with multiple tags >+FAIL font-variation-settings supports animation as float assert_equals: The value should be "wght" 1.1 at 0ms expected "\"wght\" 1.1" but got "'wght' 1.1" >+FAIL font-variation-settings supports animation as float with multiple tags assert_array_equals: The computed values should be "wdth" 1,"wght" 1.1 at 0ms property 0, expected "\"wdth\" 1" but got "'wdth' 1" > FAIL font-variation-settings supports animation as float with multiple duplicate tags assert_array_equals: The computed values should be "wdth" 2,"wght" 1.2 at 250ms lengths differ, expected 2 got 1 > PASS font-variation-settings (type: discrete) has testInterpolation function > FAIL font-variation-settings uses discrete animation when animating between ""wght" 1.1, "wdth" 1" and ""wdth" 5" with linear easing assert_equals: The value should be "wght" 1.1, "wdth" 1 at 0ms expected "\"wght\" 1.1, \"wdth\" 1" but got "normal" >@@ -173,7 +173,7 @@ FAIL font-variation-settings uses discrete animation when animating between ""wd > FAIL font-variation-settings uses discrete animation when animating between ""wdth" 5" and "normal" with keyframe easing assert_equals: The value should be "wdth" 5 at 0ms expected "\"wdth\" 5" but got "normal" > PASS letter-spacing (type: length) has testInterpolation function > PASS letter-spacing supports animating as a length >-PASS letter-spacing supports animating as a length of rem >+FAIL letter-spacing supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "3px" > PASS lighting-color (type: color) has testInterpolation function > PASS lighting-color supports animating as color of rgb() > PASS lighting-color supports animating as color of #RGB >@@ -182,9 +182,9 @@ PASS lighting-color supports animating as color of #RGBa > PASS lighting-color supports animating as color of rgba() > PASS lighting-color supports animating as color of hsla() > PASS list-style-image (type: discrete) has testInterpolation function >-FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 499ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 940ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >+FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" >+FAIL list-style-image uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-1)" > PASS outline-color (type: color) has testInterpolation function > PASS outline-color supports animating as color of rgb() > PASS outline-color supports animating as color of #RGB >@@ -196,15 +196,15 @@ PASS outline-offset (type: length) has testInterpolation function > FAIL outline-offset supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > FAIL outline-offset supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS outline-width (type: length) has testInterpolation function >-PASS outline-width supports animating as a length >-PASS outline-width supports animating as a length of rem >+FAIL outline-width supports animating as a length assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" >+FAIL outline-width supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "0px" > PASS perspective (type: length) has testInterpolation function > PASS perspective supports animating as a length >-PASS perspective supports animating as a length of rem >+FAIL perspective supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "3px" > PASS shape-outside (type: discrete) has testInterpolation function >-FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >-FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(\"http://localhost/test-2\")" >+FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with linear easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-2)" >+FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with effect easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-2)" >+FAIL shape-outside uses discrete animation when animating between "url("http://localhost/test-1")" and "url("http://localhost/test-2")" with keyframe easing assert_equals: The value should be url("http://localhost/test-1") at 0ms expected "url(\"http://localhost/test-1\")" but got "url(http://localhost/test-2)" > PASS stop-color (type: color) has testInterpolation function > PASS stop-color supports animating as color of rgb() > PASS stop-color supports animating as color of #RGB >@@ -234,7 +234,7 @@ PASS text-shadow: single shadow > PASS text-shadow: shadow list > FAIL text-shadow: mismatched list length (from longer to shorter) assert_equals: The value should be rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.5) 5px 5px 5px at 500ms expected "rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.5) 5px 5px 5px" but got "rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.501961) 5px 5px 5px" > FAIL text-shadow: mismatched list length (from shorter to longer) assert_equals: The value should be rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.5) 5px 5px 5px at 500ms expected "rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.5) 5px 5px 5px" but got "rgb(150, 150, 150) 15px 15px 15px, rgba(100, 100, 100, 0.501961) 5px 5px 5px" >-PASS text-shadow: with currentcolor >+FAIL text-shadow: with currentcolor assert_equals: The value should be rgb(0, 255, 0) 5px 5px 5px at 500ms expected "rgb(0, 255, 0) 5px 5px 5px" but got "rgb(0, 0, 0) 5px 5px 5px" > PASS transform (type: transformList) has testInterpolation function > PASS transform: translate > PASS transform: rotate >@@ -258,11 +258,11 @@ FAIL visibility uses visibility animation when animating from "hidden" to "colla > PASS visibility uses visibility animation when animating from "visible" to "hidden" with easeInOutBack easing > PASS word-spacing (type: lengthPercentageOrCalc) has testInterpolation function > PASS word-spacing supports animating as a length >-PASS word-spacing supports animating as a length of rem >+FAIL word-spacing supports animating as a length of rem assert_equals: The value should be 30px at 500ms expected "30px" but got "3px" > FAIL word-spacing supports animating as a percentage assert_equals: The value should be 30% at 500ms expected "30%" but got "0.75px" > FAIL word-spacing supports animating as combination units "px" and "%" assert_equals: The value should be calc(5px + 10%) at 500ms expected "calc(5px + 10%)" but got "3355448px" >-FAIL word-spacing supports animating as combination units "%" and "em" assert_equals: The value should be calc(10px + 5%) at 500ms expected "calc(10px + 5%)" but got "1677731.5px" >-PASS word-spacing supports animating as combination units "em" and "rem" >+FAIL word-spacing supports animating as combination units "%" and "em" assert_equals: The value should be calc(10px + 5%) at 500ms expected "calc(10px + 5%)" but got "0.125px" >+FAIL word-spacing supports animating as combination units "em" and "rem" assert_equals: The value should be 15px at 500ms expected "15px" but got "1px" > FAIL word-spacing supports animating as combination units "px" and "calc" assert_equals: The value should be calc(10px + 10%) at 500ms expected "calc(10px + 10%)" but got "0px" > FAIL word-spacing supports animating as a calc assert_equals: The value should be calc(15px + 15%) at 500ms expected "calc(15px + 15%)" but got "0px" >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186267
:
342044
|
342050
|
342057
|
342061
|
342064
|
342065
|
342066
|
342073
|
342074
|
342076
|
342078
|
342251
|
342256
|
342257
|
342260
|
342261
|
342275
|
342291
|
342294